【问题标题】:How to keep soft keyboard from opening on activity launch in Android?如何防止软键盘在 Android 活动启动时打开?
【发布时间】:2010-06-14 13:01:13
【问题描述】:

在 Android 应用中,每当 Activity 启动时,文本框都会获得焦点,并且软键盘会自动弹出。我试图通过在 onCreate 方法中使用以下行来阻止这种情况,但它不起作用。

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(EditText.getWindowToken(), 0);

【问题讨论】:

标签: android


【解决方案1】:

我知道这是旧的,但也许它会在未来帮助某人......

我没有看到有人建议“stateHidden”

From the Android docs - android:windowSoftInputMode

您的清单文件如下所示:

<activity
    ...
    android:windowSoftInputMode="stateHidden|adjustResize"
    ...
>

【讨论】:

  • 这更简单直接。
【解决方案2】:

您可以使用以下代码行确保键盘仅在用户单击 EditText 时弹出

Java

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

科特林

window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)

你需要添加

android:windowSoftInputMode="adjustResize"

到 AndroidManifest.xml 文件中的活动标签。

【讨论】:

  • 这可行,但是当我单击文本框进行输入时,键盘会在文本框上方弹出,我看不到我正在输入的内容。文本框位于屏幕底部。
  • 您需要在 AndroidManifest.xml 文件中的标签中添加 android:windowSoftInputMode="adjustResize"。
  • android:windowSoftInputMode="adjustResize" 在 AndroidManifest.xml 中设置但仍然存在同样的问题。同一屏幕上也有一个按钮。我试图通过使用将焦点移到按钮上: btn.setFocusable(true); btn.requestFocus();但重点仍然是 TextView。我不知道我做错了什么。
  • 奇怪,你能发布你的代码吗?清单中的活动标签和您的 UI 活动中的代码?
  • 我将发布代码作为这个问题的答案,因为代码格式在 cmets 中不可用。
【解决方案3】:

以下是否有效?

// Find editor
EditText editWindowInstance = this.findViewById(R.id.MyEditWindow);

// close soft keyboard 
((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(editWindowInstance.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 

【讨论】:

  • 用“hideSoftInputFromWindow(editWindowInstance, ...)”代替“editWindowInstance.getWindowToken()”怎么样?
【解决方案4】:

您可以将此代码放在您的 Activity.onCreate 中: this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

但我发现最可靠和最干净的方法是在您的活动 XML 布局中简单地将焦点设置到不同的视图

<Button
  android:id="@+id/mybutton">
  <requestFocus />
</Button>

【讨论】:

    【解决方案5】:

    没有一个解决方案对我有用。最后一个非常简单的解决方案就像魔术一样起作用。 在父布局中添加这两行。

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

    【讨论】:

      【解决方案6】:

      以下代码对我有用

      ((InputMethodManager) iClockActivity
                          .getSystemService(Context.INPUT_METHOD_SERVICE))
                          .showSoftInput(textView, 0);
      

      【讨论】:

        【解决方案7】:

        这会很好用,试试这个

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

        并将以下内容添加到您的清单中。

        android:windowSoftInputMode="stateHidden|adjustResize"
        

        欢呼享受编码......

        【讨论】:

          猜你喜欢
          • 2011-08-24
          • 1970-01-01
          • 1970-01-01
          • 2012-04-01
          • 2017-11-23
          • 1970-01-01
          • 2020-11-11
          • 1970-01-01
          相关资源
          最近更新 更多