285

我有一个有Edit Text输入的活动。初始化 Activity 时,会显示 Android 键盘。在用户集中输入之前,键盘如何保持隐藏状态?

4

18 回答 18

448

我认为以下可能有效

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

我以前用它来做这种事情。

于 2012-03-16T06:15:53.523 回答
192

试试这个 -

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

或者,

  1. 您还可以在清单文件的活动中声明 -
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main"
          android:label="@string/app_name"
          android:windowSoftInputMode="stateHidden"
          >
  1. 如果您已经使用android:windowSoftInputModeadjustResizeor之类的值adjustPan,则可以组合两个值,例如:
<activity
        ...
        android:windowSoftInputMode="stateHidden|adjustPan"
        ...
        >

这将在适当的时候隐藏键盘,但在必须显示键盘的情况下平移活动视图。

于 2012-03-16T06:18:05.607 回答
34

为使用主题的所有活动隐藏它

<style name="MyTheme" parent="Theme">
    <item name="android:windowSoftInputMode">stateHidden</item>
</style>

设置主题

<application android:theme="@style/MyTheme">
于 2012-03-16T07:41:13.787 回答
24

将这两个属性添加到您的父布局(例如:线性布局、相对布局)

android:focusable="false"
android:focusableInTouchMode="false" 

它会做的伎俩:)

于 2015-12-24T06:19:35.557 回答
14

如果您使用 API 级别 21,则可以使用 editText.setShowSoftInputOnFocus(false);

于 2015-03-20T12:10:06.643 回答
13

尝试在清单文件中声明它

<activity
    android:name=".HomeActivity"
    android:label="@string/app_name"
    android:windowSoftInputMode="stateAlwaysHidden" >
于 2014-04-04T12:06:07.553 回答
11

只需添加 AndroidManifest.xml

<activity android:name=".HomeActivity"  android:windowSoftInputMode="stateHidden">
</activity>
于 2016-01-06T14:48:25.680 回答
10

您还可以在您遇到“问题”的 .xml 布局文件的直接父布局中编写这些代码行:

android:focusable="true"
android:focusableInTouchMode="true"

例如:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ...
    android:focusable="true"
    android:focusableInTouchMode="true" >

    <EditText
        android:id="@+id/myEditText"
        ...
        android:hint="@string/write_here" />

    <Button
        android:id="@+id/button_ok"
        ...
        android:text="@string/ok" />
</LinearLayout>


编辑 :

如果 EditText 包含在另一个布局中的示例:

<?xml version="1.0" encoding="utf-8"?>
<ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ... >                                            <!--not here-->

    ...    <!--other elements-->

    <LinearLayout
        android:id="@+id/theDirectParent"
        ...
        android:focusable="true"
        android:focusableInTouchMode="true" >        <!--here-->

        <EditText
            android:id="@+id/myEditText"
            ...
            android:hint="@string/write_here" />

        <Button
            android:id="@+id/button_ok"
            ...
            android:text="@string/ok" />
    </LinearLayout>

</ConstraintLayout>

关键是要确保 EditText 不能直接聚焦。
再见!;-)

于 2018-04-17T13:57:24.303 回答
7

对我来说最好的解决方案,粘贴你的课程

@Override
public void onResume() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onResume();
}

@Override
public void onStart() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onStart();
}
于 2016-08-05T07:59:06.090 回答
7

只需将其添加到您的 manifest.xml 文件中

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

你们都完成了。

于 2018-08-09T10:01:15.167 回答
4

要扩展@Lucas 接受的答案:

从您在早期生命周期事件之一中的活动中调用它:

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

科特林示例:

override fun onResume() {
  super.onResume()

  window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}
于 2018-06-29T15:07:03.847 回答
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);
    }
}

在 AndroidManifext.xml 文件中隐藏键盘。

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:windowSoftInputMode="stateHidden">
于 2015-12-22T04:32:33.950 回答
2

您可以尝试为每个元素设置此唯一属性

TextView mtextView = findViewById(R.id.myTextView);
mtextView.setShowSoftInputOnFocus(false);

元素为焦点时键盘不会显示

于 2018-11-26T11:41:38.987 回答
1
//to hide the soft keyboard
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
于 2015-09-30T18:22:46.570 回答
0

只需将其添加到您的活动中:

@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);
}
于 2018-04-20T15:39:38.833 回答
0

在您的活动标签内的清单中声明此代码(android:windowSoftInputMode="stateAlwaysHidden")。

像这样 :

<activity android:name=".MainActivity"
  android:windowSoftInputMode="stateAlwaysHidden">
于 2020-09-10T16:17:25.090 回答
0

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

   override fun onResume() {
    window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
    super.onResume()
}
于 2022-02-17T13:07:18.427 回答
-1

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

安卓:可聚焦=“假”

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

于 2020-09-03T17:40:57.070 回答