隐藏EditText的安卓键盘

17
每当我点击 EditText 时,Android 键盘弹出窗口会出现,但我不想让键盘弹出。
我想要在当前应用程序中永久隐藏 Android 键盘弹出窗口。
我该如何做到这一点?

请查看这个之前的问题,其中提供了使用InputMethodManager的解释。 - sahhhm
可能是如何关闭/隐藏Android软键盘?的重复问题。 - Octavian Helm
我认为我的解决方案可以帮助。 - cristianomad
10个回答

28

将标志textIsSelectable设置为true会禁用软键盘。

您可以像这样在xml布局中设置它:

<EditText
    android:id="@+id/editText"
    ...
    android:textIsSelectable="true"/>

或者以编程方式实现,像这样:

EditText editText = (EditText) findViewById(R.id.editText);
editText.setTextIsSelectable(true);

光标仍然存在,您可以选择/复制/剪切/粘贴,但软键盘将永远不会显示。


1
尝试了数百种解决方案,但这是唯一真正适合我的。而且它也是最简单的。谢谢! - Santacrab
这是完美的解决方案。 - Abhijit Chakra
1
是的,在Android 8+中它不起作用,我们是否有任何其他替代解决方案??可以在xml中完成吗? - Krishna Ch
无法在Android 12上运行。 - Konstantin Konopko

12

你可以尝试像这样使用一个按钮来伪造你的EditText:

 <Button
     android:id="@+id/edit_birthday"
     style="@android:style/Widget.EditText"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:hint="@string/hint_birthday"/>

这种解决方案更好,因为键盘在这里根本不显示。在其他情况下,你可以看到键盘在弹出之前短暂地弹出,然后又弹回去了。 - Anuj
它确实可以工作,但在单次轻触后会保持按下状态。如何避免这种情况? - Iman Akbari
通过将 focusable="false" 设为不可聚焦,按键就不会一直被按住了。 - Noel

10

在清单文件中:

  <activity
        android:name=".YourActivity"
       .
       .
       .
        android:windowSoftInputMode="stateAlwaysHidden" >
   </activity>

1
这似乎只会影响当活动首次获得焦点时键盘是否显示。根据官方文档,“软键盘的状态——隐藏或可见——当活动成为用户关注的焦点时”。它不会在按下EditText时抑制键盘。 - Mike

7

适用于所有Android版本。

在您的XML中使用属性android:textIsSelectable="true"

<EditText
    android:id="@+id/editText1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    .
    .
    .
    android:textIsSelectable="true"/>

在你的Java类中:

editText1.setShowSoftInputOnFocus(false);

在Kotlin中:
editText1.showSoftInputOnFocus = false

1
setShowSoftInputOnFocus(false) 对我有效。谢谢。(在Android 9中) - voodoo98

5

解决方案可以在这里找到:

public void onCreate(Bundle savedInstanceState) {

edittext = (EditText) findViewById(R.id.EditText01);

edittext.setOnEditorActionListener(new OnEditorActionListener() {
      public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
         if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
            InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            in.hideSoftInputFromWindow(edittext.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
         }
         return false;
      }
   });
}

0

试一下

 public void disableSoftKeyboard(final EditText v) {
            if (Build.VERSION.SDK_INT >= 11) {
                v.setRawInputType(InputType.TYPE_CLASS_TEXT);
                v.setTextIsSelectable(true);
            } else {
                v.setRawInputType(InputType.TYPE_NULL);
                v.setFocusable(true);
            }
        }

0

在你的 XML 文件中,你可以使用这个:

android:editable="false"

0
在你的xml中将属性editable设置为false。 这样就不会让你编辑文本,键盘也不会弹出。
<EditText
     android:editable="false"
 />

0
尝试在你的onCreate()方法中添加这个。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

没有测试过,但应该可以工作!


0

这两行代码应该可以满足你的需求:

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

完全不起作用...键盘弹出来就像平常一样...你还做了什么吗? - TacB0sS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接