我有一个屏幕,第一个字段是EditText,在启动时获取焦点,并弹出数字输入类型,这非常令人烦恼。
我该如何确保在活动启动时不获取焦点和/或不弹出输入面板?
我有一个屏幕,第一个字段是EditText,在启动时获取焦点,并弹出数字输入类型,这非常令人烦恼。
我该如何确保在活动启动时不获取焦点和/或不弹出输入面板?
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0);
或者
在应用程序标签中,将清单文件中的活动属性设置为以下内容
android:windowSoftInputMode="stateHidden"
前往您的应用程序清单文件,并为您想要禁用自动弹出键盘的活动编写以下行。
android:windowSoftInputMode="stateHidden"
要在编程中不显示键盘,但默认小部件仍然保持焦点,请调用:
getWindow().setSoftInputMode(WindowManager.
LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
在onResume()
中
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
在`onCreate()`中调用上述方法。这可以防止软键盘在用户未选择`EditText`的情况下出现,除非用户通过`点击或轻触`选择它。或者在`Manifest.xml`文件的Activity标签中简单地添加`android:windowSoftInputMode="stateHidden"`。这通常是一团糟。我尝试的第一件事是通过 . 使用另一个视图来窃取焦点。您还必须拥有可聚焦和可触摸模式下可聚焦的功能。
<TextView
...
android:focusable="true"
android:focusableInTouchMode="true">
<requestFocus/>
</TextView>
让另一个视图获得焦点。默认情况下,当布局被填充时,第一个可聚焦的视图将获得焦点。您可以通过XML请求在不同视图上获得焦点:
<TextView
android:layout_width="wrap_parent"
android:layout_height="wrap_content"
android:text="Some other view">
<requestFocus />
</TextView>
这适用于任何视图。
如果你想要以编程方式实现它,你可以使用view.requestFocus()
。
android:windowSoftInputMode="stateHidden"
添加到您在清单中的 Activity 中只会在启动 Activity 时隐藏键盘,或者正如 Google 所说:
为了在用户按下后退按钮并从其他活动返回到您的活动时也隐藏键盘,请使用当用户积极前往该活动时,而不是由于离开另一个活动而返回它
android:windowSoftInputMode="stateAlwaysHidden"
if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED)
{
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}
{}
或按 Ctrl+K
进行格式化。 - Peter Lang我没有尝试过这个,也不在我的编程电脑附近,但我认为通过编程方式将焦点发送到父视图或类似的操作可能会解决问题 - 这更像是一种变通方法而不是解决方案,但是由于无法测试,这只是我的想法。
.requestFocus();
,但是键盘仍然弹出。 - Pentium10
格式:标志 值:adjustNothing、adjustPan、adjustResize、adjustUnspecified、stateAlwaysHidden、stateAlwaysVisible、stateHidden、stateUnchanged、stateUnspecified、stateVisible 指定此活动的主窗口的默认软输入模式。这里除了“未指定”之外的任何值都会覆盖主题中的任何值。
- Jeff Muir