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

我有一个带有Edit Text输入的活动。当activity初始化时,显示Android键盘。在用户聚焦输入之前,键盘如何保持隐藏?

153313 次浏览

我认为以下方法可能有用

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

我以前用过这种方法。

试试这个——

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

另外,

  1. 您还可以在清单文件中声明activity -
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main"
android:label="@string/app_name"
android:windowSoftInputMode="stateHidden"
>
  1. 如果你已经将android:windowSoftInputMode用于adjustResizeadjustPan这样的值,你可以将两个值组合起来:
<activity
...
android:windowSoftInputMode="stateHidden|adjustPan"
...
>

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

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

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

设定主题

<application android:theme="@style/MyTheme">

尝试在manifest文件中声明它

<activity
android:name=".HomeActivity"
android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysHidden" >

如果你使用的是API级别21,你可以使用editText.setShowSoftInputOnFocus(false);

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

函数隐藏键盘。

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">

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

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

它会成功的:)

只需添加AndroidManifest.xml即可

<activity android:name=".HomeActivity"  android:windowSoftInputMode="stateHidden">
</activity>

对我来说最好的解决办法是,粘贴你的类

@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();
}

你也可以在你有“问题”的.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>
< p > < br > 编辑:< / >强

例如,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不能直接对焦。< br > 再见!: -) < / p >

只要在你的活动中添加这个:

@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);
}

扩展一下@Lucas的回答:

从生命周期早期事件的活动中调用这个:

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

芬兰湾的科特林的例子:

override fun onResume() {
super.onResume()


window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}

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

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

你都完成了。

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

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

当元素是焦点时,键盘将不显示

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

android: focusable =“false"

将其设置为false.下面是代码片段

(android:windowSoftInputMode="stateAlwaysHidden")

像这样:

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

只有这个解决方案对我的API 26 &芬兰湾的科特林

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