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


151

android:windowSoftInputMode="stateVisible"在清单中有一个Edittext 。现在,当我开始活动时,将显示键盘。怎么藏起来?我无法使用,android:windowSoftInputMode="stateHidden因为当键盘可见时,请最小化应用程序并恢复它,键盘应可见。我尝试过

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

但它没有用。

Answers:


1

如果您不想使用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)
}

同时请求将焦点放在edittext上的更简单方法

myEdittext.focus()

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

简化奖金:

删除使用过的要求getSystemServiceSplitties库

// Simplifies above solution to just
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)


204

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

/**
 * 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对于那些谁是片段或不在主要活动等
奥利弗·迪克森

7
你可以试试看 如果您从活动中调用它,它将起作用。getWindow()。setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)‌ ;;
SinanDizdarević16年

如果我们需要在侦听器中调用此方法怎么办?像onFocusChange()
安德烈玉海

44

只需将两个属性添加到editText的父视图。

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

36

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

  android:windowSoftInputMode="stateHidden"  

或android:windowSoftInputMode =“ stateUnchanged”-的工作方式类似:如果尚未显示,则不显示它,但如果在进入活动时已打开,则将其保持打开状态)。
Sujeet Kumar Gupta

你是正确的。但是如果方向改变了怎么办?
Saneesh

26

试试这个:

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

请查看详细信息。



10

使用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;
}});

7

将以下文本添加到您的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);

5

要在“新活动”启动时或onCreate(),onStart()方法等时隐藏软键盘,请使用以下代码:

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

在活动中单击“按钮”时要隐藏软键盘:

View view = this.getCurrentFocus();

    if (view != null) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        assert imm != null;
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }


5

在您的活动中添加此属性

android:windowSoftInputMode="stateHidden" 

4

将此代码放入您的Java文件,并在edittext上传递object的参数,

private void setHideSoftKeyboard(EditText editText){
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}

4

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

例:

<activity
    android:name="Activity"
    android:configChanges="orientation|keyboardHidden"
    android:theme="@*android:style/Theme.NoTitleBar"
    android:launchMode="singleTop"
    android:windowSoftInputMode="stateHidden"/>

4

首次启动“活动”时,使用以下代码隐藏软键盘

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

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

3

以上答案也是正确的。我只想简单介绍一下,在开始活动时有两种方法可以从manifest.xml隐藏键盘。例如:

<activity
..........
android:windowSoftInputMode="stateHidden"
..........
/>
  • 进入活动时,以上方法始终将其隐藏。

要么

<activity
..........
android:windowSoftInputMode="stateUnchanged"
..........
/>
  • 这个人说不要更改它(例如,如果尚未显示,则不要显示它,但是如果在进入活动时它是打开的,则将其保持打开状态)。

2

这是我所做的:

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

2

如果您的应用程序的目标是Android API级别21或更高,则可以使用默认方法。

editTextObj.setShowSoftInputOnFocus(false);

确保已在EditTextXML标签中设置了以下代码。

<EditText  
    ....
    android:enabled="true"
    android:focusable="true" />

1

试试这个。

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

then方法onCreateOptionsMenu,它必须具有一个ComponentName对象,该对象带有您的包名称和完整的类名(带有包名称)-如果活动的SearchView组成部分与show search结果使用的相同getComponentName(),则如android系统开发者所说。

我尝试了很多解决方案,经过大量的工作,该解决方案对我来说很有用。


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

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

它会工作


尽管此代码可以回答问题,但提供有关此代码为什么和/或如何回答问题的其他上下文,可以改善其长期价值。
rollstuhlfahrer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.