如何在活动开始时隐藏软键盘

162
我在Manifest中使用了android:windowSoftInputMode="stateVisible"属性的Edittext。现在当我启动这个Activity时,键盘会自动弹出。如何隐藏它?我不能使用android:windowSoftInputMode="stateHidden",因为当键盘可见时,最小化应用程序并恢复它后,键盘应该保持可见状态。 我尝试过以下代码,但是它没有起作用:

InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);

23个回答

380

AndroidManifest.xml 文件中:

<activity android:name="com.your.package.ActivityName"
          android:windowSoftInputMode="stateHidden"  />

或者尝试一下

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)‌​;
请查看这个

5
谢谢你使用 android:windowSoftInputMode="stateHidden" - Shailendra Madda
2
实际上,关于如何防止焦点落在编辑文本上,这里也有一个很好的答案:https://dev59.com/n2445IYBdhLWcg3w3Nsf - Boris Treukhov

208

使用以下函数来显示/隐藏键盘:

/**
 * Hides the soft keyboard
 */
public void hideSoftKeyboard() {
    if(getCurrentFocus()!=null) {
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    }
}

/**
 * Shows the soft keyboard
 */
public void showSoftKeyboard(View view) {
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    view.requestFocus();
    inputMethodManager.showSoftInput(view, 0);
}

4
Context.INPUT_METHOD_SERVICE 适用于那些在片段中或不在主活动中的人等。 - Oliver Dixon
8
你可以尝试这个方法。如果你从Activity中调用它,它就能起作用。getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)‌​; - Sinan Dizdarević
如果我们需要从监听器内部调用它怎么办?例如 onFocusChange() - Burak Kaymakci

48

只需在editText的父视图中添加两个属性。

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

37
在Activity标记内的清单文件中添加此内容。
  android:windowSoftInputMode="stateHidden"  

或者android:windowSoftInputMode =“stateUnchanged” - 这个功能的作用是:如果软键盘没有打开,就不要显示它,但如果在进入活动时已经打开,请保持打开状态。 - Sujeet
是的,你说得对。但如果方向改变了呢? - Saneesh

27

试试这个:

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

查看这个以了解更多细节。


13
在新的Activity开始或onCreate()onStart()等时间隐藏软键盘,您可以使用以下代码:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

12

使用AndroidManifest.xml

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

使用Java

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

使用上述解决方案,键盘将在活动创建时隐藏,但当您触摸它们时,可以获取焦点而不编辑文本。在您的EditText中添加:

<EditText
android:focusable="false" />

还需要为您的EditText添加监听器

youredittext.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
    v.setFocusable(true);
    v.setFocusableInTouchMode(true);
    return false;
}});

8
将以下文本添加到您的XML文件中。
<!--Dummy layout that gain focus -->
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:orientation="vertical" >
            </LinearLayout>

6

我希望这个方法能够有效,我尝试了许多种方法,但是在fragments中,这个方法对我起作用了。只需将此行代码放入onCreateview/init即可。

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

6
在manifests中添加您的活动,使用此属性。
android:windowSoftInputMode="stateHidden" 

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