158

android:windowSoftInputMode="stateVisible"我在 Manifest 中有一个 Edittext 。现在,当我开始活动时,将显示键盘。如何隐藏它?我不能使用android:windowSoftInputMode="stateHidden,因为当键盘可见时,最小化应用程序并恢复它,键盘应该可见。我试过了

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

但它没有用。

4

23 回答 23

377

AndroidManifest.xml

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

或尝试

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

请也检查一下

于 2013-09-24T09:19:07.753 回答
205

使用以下功能显示/隐藏键盘:

/**
 * 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);
}
于 2013-09-24T09:06:13.903 回答
47

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

android:focusable="true"
android:focusableInTouchMode="true"
于 2016-04-19T06:48:18.477 回答
37

将其放在 Activity 标记内的清单中

  android:windowSoftInputMode="stateHidden"  
于 2017-06-25T05:31:40.603 回答
27

尝试这个:

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

看看这个了解更多细节。

于 2013-09-24T10:17:48.863 回答
14

要在新活动开始时隐藏软键盘或onCreate()等,onStart()您可以使用以下代码:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
于 2014-09-11T11:47:48.850 回答
12

使用AndroidManifest.xml

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

使用Java

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

使用上述解决方案键盘隐藏但edittext在创建活动时获取焦点,但在您触摸它们时使用:

添加你的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;
}});
于 2018-09-27T05:56:49.813 回答
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>
于 2014-09-22T11:37:18.593 回答
6

在 manifasts 这个属性中添加你的活动

android:windowSoftInputMode="stateHidden" 
于 2019-06-22T20:50:25.740 回答
6

我希望这会奏效,我尝试了很多方法,但这个方法对我有用fragments。只需将这一行放在 onCreateview/init 中。

getActivity().getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
于 2017-03-13T12:45:51.877 回答
6

上面的答案也是正确的。我只是想简要说明一下,在 manifest.xml 中启动 Activity 时有两种方法可以隐藏键盘。例如:

<activity
..........
android:windowSoftInputMode="stateHidden"
..........
/>
  • 上述方式在进入活动时总是隐藏它。

或者

<activity
..........
android:windowSoftInputMode="stateUnchanged"
..........
/>
  • 这个说不要改变它(例如,如果它尚未显示,则不要显示它,但如果在进入活动时它是打开的,则让它保持打开状态)。
于 2020-02-27T09:05:49.110 回答
6

如果您不想使用 xml,请制作 Kotlin Extension 以隐藏键盘

// In onResume, call this
myView.hideKeyboard()

fun View.hideKeyboard() {
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

基于用例的替代方案:

fun Fragment.hideKeyboard() {
    view?.let { activity?.hideKeyboard(it) }
}

fun Activity.hideKeyboard() {
    // Calls Context.hideKeyboard
    hideKeyboard(currentFocus ?: View(this))
}

fun Context.hideKeyboard(view: View) {
    view.hideKeyboard()
}

如何显示软键盘

fun Context.showKeyboard() { // Or View.showKeyboard()
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.toggleSoftInput(SHOW_FORCED, HIDE_IMPLICIT_ONLY)
}

同时请求对编辑文本的关注时更简单的方法

myEdittext.focus()

fun View.focus() {
    requestFocus()
    showKeyboard()
}

奖金简化:

删除永远使用的要求getSystemServiceSplitties Library

// Simplifies above solution to just
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
于 2020-01-17T03:17:51.210 回答
5

将此代码放入您的java文件并在edittext上传递对象的参数,

private void setHideSoftKeyboard(EditText editText){
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
于 2015-01-16T14:09:14.590 回答
5

要在 New Activity 启动或 onCreate()、onStart() 方法等时隐藏软键盘,请使用以下代码:

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

要在 Button 时隐藏软键盘,请单击活动:

View view = this.getCurrentFocus();

    if (view != null) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        assert imm != null;
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
于 2018-05-17T07:16:07.197 回答
5

使用 SOFT_INPUT_STATE_ALWAYS_HIDDEN 而不是 SOFT_INPUT_STATE_HIDDEN

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
于 2019-05-24T10:18:33.107 回答
4

首次启动 Activity 时使用以下代码隐藏软键盘

getActivity().getWindow().setSoftInputMode(WindowManager.
LayoutParams.SOFT_INPUT_STATE_HIDDEN);
于 2017-10-28T10:45:14.143 回答
4

您可以在 AndroidManifest.xml 上设置配置

例子:

<activity
    android:name="Activity"
    android:configChanges="orientation|keyboardHidden"
    android:theme="@*android:style/Theme.NoTitleBar"
    android:launchMode="singleTop"
    android:windowSoftInputMode="stateHidden"/>
于 2017-06-22T04:47:23.633 回答
3

也试试这个

Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});
于 2014-05-19T12:37:48.483 回答
3

这就是我所做的:

yourEditText.setCursorVisible(false); //This code is used when you do not want the cursor to be visible at startup
        yourEditText.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                v.onTouchEvent(event);   // handle the event first
                InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {

                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  // hide the soft keyboard
                    yourEditText.setCursorVisible(true); //This is to display cursor when upon onTouch of Edittext
                }
                return true;
            }
        });
于 2015-07-10T03:59:28.543 回答
2

如果您的应用程序面向Android API 级别 21 或更高级别,则有可用的默认方法。

editTextObj.setShowSoftInputOnFocus(false);

确保您在EditTextXML 标记中设置了以下代码。

<EditText  
    ....
    android:enabled="true"
    android:focusable="true" />
于 2018-03-28T12:45:37.140 回答
1
Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});

this one worked for me
于 2018-04-07T15:01:12.333 回答
1
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

它会起作用

于 2018-04-26T05:20:50.653 回答
1

尝试这个。

首先在可搜索的 xml 中放置字段(名称和提示等)@string而不是文字字符串。

然后方法onCreateOptionsMenu,它必须有一个ComponentName带有您的包名称和完整的类名称(带有包名称)的对象 - 如果具有SearchView组件的活动与显示搜索结果使用相同getComponentName(),如 google android 开发人员所说。

我尝试了很多解决方案,经过很多工作,这个解决方案对我有用。

于 2016-03-18T02:53:15.013 回答