防止键盘在活动启动时显示

289

我有一个带有Edit Text输入框的活动。当活动被初始化时,安卓键盘会显示出来。如何让键盘保持隐藏状态,直到用户聚焦该输入框?


97
在您的清单文件中 <activity android:windowSoftInputMode="stateHidden" ...> 表示隐藏软键盘。 - idiottiger
1
可能是Android 屏幕键盘自动弹出的重复问题。 - Caleb
2
如何与 android:windowSoftInputMode="adjustPan" 一起使用? - János
5
@János android:windowSoftInputMode="adjustPan|stateHidden" 意为Android应用程序窗口软键盘模式设置,其中"adjustPan"表示屏幕被顶起以避免被软键盘覆盖,并且"stateHidden"表示在显示软键盘时隐藏其状态栏。 - Mando
这个评论中的答案就是我要找的答案: https://dev59.com/wm445IYBdhLWcg3wdqOO#23605510 - korchix
真正的答案在评论中,感谢@idiottiger。 - jerrythebum
18个回答

4

在@Lucas所接受的答案的基础上,进一步扩展:

在您的活动中的一个早期生命周期事件中调用此函数:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

Kotlin示例:

override fun onResume() {
  super.onResume()

  window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}

3
隐藏键盘的功能。
public static void hideKeyboard(Activity activity) {
    View view = activity.getCurrentFocus();

    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);

        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

在AndroidManifest.xml文件中隐藏键盘。
<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:windowSoftInputMode="stateHidden">

2
你可以为每个元素尝试使用设置唯一属性。
TextView mtextView = findViewById(R.id.myTextView);
mtextView.setShowSoftInputOnFocus(false);

当元素聚焦时,键盘不会显示


虽然这可能回答了作者的问题,但它缺少一些解释性的词语和/或文档链接。裸代码片段没有周围的一些短语是不太有帮助的。您也可以在如何撰写好的答案中找到很多有用的信息。请编辑您的答案 - 来自审核 - Nick

1
//to hide the soft keyboard
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

0

只需在您的Activity中添加以下内容:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
      if (getCurrentFocus() != null) {
           InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
           imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
      }
      return super.dispatchTouchEvent(ev);
}

0

只有这个解决方案在 API 26 和 Kotlin 上对我起了作用。

   override fun onResume() {
    window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
    super.onResume()
}

0

在你的活动标签中,在清单文件中声明此代码(android:windowSoftInputMode="stateAlwaysHidden")。

像这样:

<activity android:name=".MainActivity"
  android:windowSoftInputMode="stateAlwaysHidden">

-1

或者你可以在xml中使用可聚焦标签。

android:focusable="false"

将其设置为false。这里是代码片段


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