【问题标题】:AnySoftKeyboad stays with garbage data after I hide itAnySoftKeyboard 在我隐藏后保留垃圾数据
【发布时间】:2011-12-04 16:56:38
【问题描述】:
我有一个问题,只有在我使用 AnySoftKeyboard 时才会出现。
我正在尝试根据 EditText 焦点显示/隐藏键盘。
我使用了我在this post找到的方法
当我隐藏键盘时,有一个奇怪的行为 -
- 当我旋转屏幕时,EditText 中的文本会加倍。
- 我认为它与 onCreate 方法有关,但我可以看到当我单击“返回”(Finish())时也会发生这种情况。在 Activity 关闭之前,我看到它的瞬间。
- 当我开始一个新活动时,(来自 ActivityA 的 ActivityB)然后单击“返回”一次不会执行任何操作(可能是“关闭”不可见的键盘)。
- 当我再次单击“返回”时,ActivityB 关闭,但我可以在一瞬间看到 ActivityA 键盘中的文本以大字体显示在屏幕上(如 100 毫秒的弹出窗口)
有没有人知道如何处理它?
【问题讨论】:
标签:
android
user-interface
keyboard
android-edittext
【解决方案1】:
显然这是 AnySoftKeyboard 中的一个错误。
当我使用其他键盘时,我没有发生。
我通过在隐藏它之前对 EditText 视图执行 setText 来解决它 - 它可能会重置键盘对象上的一些东西。
这是我的代码:
View view = getWindow().getCurrentFocus();
if (view==null)
return;
IBinder binder = view.getWindowToken();
if (binder == null)
return;
// I used this to fix the strange behaviour
if (view instanceof EditText)
((EditText)view).setText(((EditText)view).getText().toString());
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(binder, InputMethodManager.HIDE_NOT_ALWAYS);
令人惊讶的是它的工作原理!
【解决方案2】:
试试这个:
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);