【问题标题】:Prevent editText.setText while EditText is being modified by soft input keyboard在通过软输入键盘修改 EditText 时防止 editText.setText
【发布时间】:2013-10-22 15:47:59
【问题描述】:

我的应用程序中有一个 EditText。此 editText 使用 editText.setText 方法每 10 秒通过代码更新一次。我想在用户打开软键盘时停止此更新。当用户完成他的输入操作(按完成)按钮时,我想从 editText.setText 恢复更新。 我尝试过 InputMethodManager isActive(View) 来检查我的 EditText 当前是否在使用 editText.setText 方法时处于活动状态。这在显示键盘时非常有效。但是当用户单击完成按钮并且软键盘被隐藏时,isActive(View) 仍然给出 true 并且我的 editText.setText 没有被调用。 下面是我的代码,它每 10 秒更新一次 editText。

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(!imm.isActive(editText)){
   editText.setText("10.2");
  }

所以即使在用户按下软键盘的完成按钮后,这个 imm.isActive(editText) 也会返回 true。 请提出任何方法来完成这项工作。

【问题讨论】:

    标签: android android-edittext android-softkeyboard simultaneous


    【解决方案1】:

    解决方案 1

    创建一个布尔控制变量isKeyboardVisible,并在显示键盘时将其设置为true,在隐藏键盘时将其设置为false。在调用setText()之前检查它的值。

    解决方案 2

    另一种有点老套的解决方案是将更改EditText 值的两个部分都包含在synchronized 块中。这样每个部分都会在执行之前等待另一个部分完成。

    解决方案 3

    您可以listenEditText 的焦点更改事件做出反应。它们往往与软键盘显示/隐藏本身相吻合。

    【讨论】:

    • 嗨,Piovezan,感谢您的回复。
    • 没问题。如果您对答案感到满意,请单击其左侧的复选标记接受它。
    • 我正在尝试解决方案 1,但是有一些棘手的方法可以找出键盘的可见性。在许多线程中,他们建议在键盘可见性之前和之后测量屏幕大小。我不能使用这种方法,因为我在全屏模式下运行这个应用程序。解决方案 2 可能有用,但是当用户从键盘输入 editText 时,我无法控制此代码,也无法将此代码放在同步块中。
    • @user2907714 我添加了第三个解决方案。不确定它是否会起作用。希望对您有所帮助。
    • 当我按下完成按钮时,editText 不会失去焦点。我正在尝试将焦点设置在另一个按钮组件上,但 editText 仍然有焦点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 2012-10-30
    • 2012-03-17
    • 1970-01-01
    • 2016-03-15
    • 2018-02-22
    相关资源
    最近更新 更多