当我们有一个EditText
并且它失去焦点(对于不需要键盘的元素)时,软键盘应该自动隐藏还是我们应该自己隐藏它?
我正在将焦点从AutoCompleteSearchView
(EditText
我的行为应该像我猜的那样)移动到a Button
,requestFocus()
返回true,但键盘不会隐藏.
lee*_*d92 63
最好的方法是为EditText设置OnFocusChangeListener,然后将键盘中的代码添加到侦听器的OnFocusChange方法中.当EditText失去焦点时,Android将自动关闭键盘.
你的OnCreate方法中有类似的东西:
EditText editText = (EditText) findViewById(R.id.textbox);
OnFocusChangeListener ofcListener = new MyFocusChangeListener();
editText.setOnFocusChangeListener(ofcListener);
Run Code Online (Sandbox Code Playgroud)
然后添加类:
private class MyFocusChangeListener implements OnFocusChangeListener {
public void onFocusChange(View v, boolean hasFocus){
if(v.getId() == R.id.textbox && !hasFocus) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Android不会为您隐藏键盘.如果您希望键盘在EditText
失去焦点时隐藏,请尝试在该事件上使用这样的方法:
private void hideKeypad() {
EditText edtView = (EditText) findViewById(R.id.e_id);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edtView.getWindowToken(), 0);
}
Run Code Online (Sandbox Code Playgroud)
小智 6
试试这个
/**
* Hide keyboard on touch of UI
*/
public void hideKeyboard(View view) {
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
hideKeyboard(innerView);
}
}
if (!(view instanceof EditText)) {
view.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard(v);
return false;
}
});
}
}
/**
* Hide keyboard while focus is moved
*/
public void hideSoftKeyboard(View view) {
if (view != null) {
InputMethodManager inputManager = (InputMethodManager) contentsContext_
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (inputManager != null) {
if (android.os.Build.VERSION.SDK_INT < 11) {
inputManager.hideSoftInputFromWindow(view.getWindowToken(),
0);
} else {
if (this.getCurrentFocus() != null) {
inputManager.hideSoftInputFromWindow(this
.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
view.clearFocus();
}
view.clearFocus();
}
}
}
Run Code Online (Sandbox Code Playgroud)
试试这个,也许它会解决你的问题。
private void hideKeyboard() {
InputMethodManager mImMan = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
mImMan.hideSoftInputFromWindow(mYourEdttxtName.getWindowToken(), 0);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
47325 次 |
最近记录: |