我最近在Nexus 7手机上遇到了这个问题。在我们的其他测试手机上,没有出现这种行为。诀窍似乎是在关闭软键盘之前改变焦点。软键盘在3个点处关闭 - 点击“完成”按钮,点击编辑框外部和点击返回按钮。
首先,创建一个隐藏元素来占用您的焦点。
<MyEditText
android:id="@+id/editHidden"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_below="@id/imageLogin"
/>
我存储了这个,但它看起来有点丑陋...
@Override
protected void onResume() {
super.onResume()
Utils.focusable = findViewById(R.id.editHidden)
现在当键盘关闭时,将焦点转移到您的隐藏元素。
public static void clearFocus() {
try {
if (focusable!=null)
focusable.requestFocus();
} catch (Exception e) {}
}
public static void hideSoftKeyboard(View view) {
clearFocus();
if (view!=null) {
try {
InputMethodManager inputMethodManager = (InputMethodManager) view.getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
} catch (Exception e) {}
}
}
在键盘关闭的位置运行hideKeyboard函数:
EditText返回键被按下:
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_BACK)
{
try {
Utils.clearFocus();
} catch (Exception e) {}
}
return super.onKeyPreIme(keyCode, event);
}
按下“完成”按钮,将其附加到任何发生问题的EditText框中:
public static OnEditorActionListener getOnEditorActionListener() {
return new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId==EditorInfo.IME_ACTION_DONE){
hideSoftKeyboard(v);
}
return false;
}
};
}
请在onCreate()中将点击文本框外部的事件附加到页面上的所有元素;
public static void setupUI(View view) {
try {
if(!(view instanceof EditText)) {
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard(v);
return false;
}
});
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
} catch (Exception e) {}
这样做虽然有些混乱,但解决了问题,希望能找到更好的方法。
EditText
是隐藏的还是只有字符开始的地方隐藏了? - codeMagic