如何在Android中启动活动时防止软键盘弹出?

44
在Android应用中,每当活动启动时,文本框会获得焦点并自动弹出软键盘。我尝试在onCreate方法中使用以下代码来停止这个行为,但它不起作用。

在Android应用程序中,每当活动启动时,文本框都会自动获得焦点并弹出软键盘。我尝试在onCreate方法中使用以下代码来停止此行为,但它无效。

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

可能是如何在屏幕显示时取消字段的自动聚焦/键盘弹出?的重复问题。 - Shirish Herwade
7个回答

122

我知道这是老的内容,但也许会在未来帮助到某些人...

我没有看到有人建议使用"stateHidden"

来自Android文档- android:windowSoftInputMode

你的清单文件应该像这样:

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

3
这更简单和直接了当。 - Robert

20
您可以使用以下代码行来确保仅当用户点击EditText时才弹出键盘。 Java
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

Kotlin

window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)

正如有人在这里回答我所说:

你需要添加

android:windowSoftInputMode="adjustResize" 

将此代码添加到 AndroidManifest.xml 文件中的活动标签中。


这个可以用,但是当我点击文本框进行输入时,键盘会弹出并覆盖住文本框,导致我看不到正在输入的内容。文本框位于屏幕底部。 - Adnan
你需要在AndroidManifest.xml文件中的标签中添加android:windowSoftInputMode="adjustResize"。 - Donal Rafferty
在AndroidManifest.xml中设置了android:windowSoftInputMode="adjustResize",但问题仍然存在。同一个屏幕上还有一个按钮。我尝试使用以下代码将焦点移动到按钮上:btn.setFocusable(true); btn.requestFocus();但是焦点仍然在TextView上。我不知道我做错了什么。 - Adnan
奇怪,你能发布你的代码吗?包括清单文件中的活动标签和 UI 活动中的代码? - Donal Rafferty
1
我将在此问题的答案中发布代码,因为评论中不支持代码格式。 - Adnan

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()”怎么样? - Thorsten Dittmar

2

您可以将以下代码放在Activity.onCreate中:

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

但我发现最可靠和清晰的方法是在您的活动XML布局中将焦点简单地设置为另一个视图。

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

1
没有任何一种解决方案适用于我。最终,一个非常简单的解决方案像魔法一样奏效了。 在您的父布局中添加这两行代码即可。
android:focusable="true" 
android:focusableInTouchMode="true"

0

这个会完美地工作,试试看

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

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

android:windowSoftInputMode="stateHidden|adjustResize"

0

以下代码对我有效

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

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