【问题标题】:How to stop the android soft keyboard from ever coming up in my entire application如何阻止android软键盘出现在我的整个应用程序中
【发布时间】:2010-03-12 00:06:01
【问题描述】:

我正在硬件设备上开发一个应用程序,该设备具有内置的硬件键盘,该键盘不会滑出,因此始终可见(如黑莓)。因此,我从不希望软键盘显示在我的整个应用程序中。我知道another SO question 给出了以下代码行:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

但我不知道在哪里放置此代码以将软键盘隐藏在它可能出现在我的 Activity 中的所有位置。我尝试将代码添加到Activity.onUserInteraction 无济于事。似乎键盘出现在 onUserInteraction 执行之后。

我还尝试将以下内容添加到我的<Activity>

<activity 
    android:windowSoftInputMode="stateAlwaysHidden"
>

软键盘仍然出现。

【问题讨论】:

  • 我在演示中解决这个问题的方法是关闭整个手机的 Android 键盘:“设置 -> 语言和键盘 -> Android 键盘(取消选中)”。由于手机带有始终可见的硬键盘,因此无论如何这似乎都是合适的。感谢 CommonsWare 和 Macarse,他们为遇到此问题的其他人提供了很好的指导。
  • 还有一件事,如果你发现自己也有同样的情况,请点击 CommonsWare 的 cmets 中的链接到 Android bug 7115 并点击星号投票。

标签: android android-hardware


【解决方案1】:

您的应用程序不应执行任何操作。设备的固件应包含基于可见的硬件键盘禁止软键盘的配置,就像所有其他具有硬件键盘的 Android 设备一样。如果这没有发生,请与硬件制造商联系,看看他们是否计划解决此问题。

【讨论】:

  • 谢谢,但这对我明天做演示没有帮助。还有其他想法吗?
  • 好吧,根据我对文档的阅读,android:windowSoftInputMode="stateAlwaysHidden" 应该已经完成​​了。我可以确认它不起作用,至少在 Android 2.0.1 和 2.1 上是这样。我怀疑有一个错误——我已经在code.google.com/p/android/issues/detail?id=7115 提交了一个问题。当然,这对你明天没有帮助。 :-( 检测软键盘出现的唯一方法是检测您的内容视图已调整大小的事实。因此,扩展您布局的根ViewGroup,覆盖onSizeChanged(),然后尝试hideSoftInputFromWindow()点。
  • 感谢您提交错误报告。我继续投票。我也很感谢你的回答——我最终采用了供应商的方法,正如我对这个问题的评论所解释的那样。
【解决方案2】:

明天演示的简单解决方法:

我会创建一个带有空视图的新 IME。这里有两个开源项目供大家看代码。

如果您想了解更多关于输入法的信息,请前往Creating an input method

【讨论】:

    【解决方案3】:

    如果 EditText 的 inputType 为 0,则选择该 EditText 时软键盘将永远不会弹出。

    EditText editText = findViewById(R.id.edit_text);
    editText.setInputType(0);

    这当然需要为应用程序中的所有 EditText 完成,或者您可以始终将 EditText 子类化并在构造函数中将输入类型设置为 0。

    设置 xml inputType 参数是不行的,因为这对应于对 setRawInputType 方法的调用,它不会删除 KeyListener。

    【讨论】:

      【解决方案4】:

      我通过在我的自定义 EditText 中覆盖 onCheckIsTextEditor 方法解决了这个问题。

      @Override
      public boolean onCheckIsTextEditor() {
          return false;
      }
      

      【讨论】:

        【解决方案5】:

        如果你有编辑文本,把这段代码放在哪里..

        edittext.setInputType(InputType.TYPE_NULL);      
        if (android.os.Build.VERSION.SDK_INT >= 11)   
        {  
            edittext.setRawInputType(InputType.TYPE_CLASS_TEXT);  
            edittext.setTextIsSelectable(true);  
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-19
          • 1970-01-01
          • 1970-01-01
          • 2015-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多