防止键盘在活动开始时显示

时间:2012-03-16 06:12:30

标签: java android focus android-keypad

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

17 个答案:

答案 0 :(得分:401)

我认为以下内容可能有效

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

我以前用过这种东西。

答案 1 :(得分:168)

试试这个 -

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

否则,在清单文件的活动中声明 -

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main"
          android:label="@string/app_name"
          android:windowSoftInputMode="stateHidden"
          >

如果您已使用android:windowSoftInputMode获取adjustResizeadjustPan等值,则可以合并两个值,如:

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

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

答案 2 :(得分:32)

使用主题

隐藏所有活动
<style name="MyTheme" parent="Theme">
    <item name="android:windowSoftInputMode">stateHidden</item>
</style>

设置主题

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

答案 3 :(得分:22)

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

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

它会起作用:)

答案 4 :(得分:12)

尝试在清单文件中声明它

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

答案 5 :(得分:9)

只需添加AndroidManifest.xml

Microsoft.Band.Store

答案 6 :(得分:9)

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

答案 7 :(得分:6)

最适合我的解决方案,粘贴您的课程

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

答案 8 :(得分:6)

您还可以在.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>

关键是要确保EditText不能直接对焦。
再见! ; - )

答案 9 :(得分:3)

  

隐藏键盘的功能。

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

在AndroidManifext.xml文件中隐藏键盘。

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:windowSoftInputMode="stateHidden">

答案 10 :(得分:3)

扩展@Lucas接受的答案:

在生命周期的早期事件之一中从您的活动中调用此方法:

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

Kotlin示例:

override fun onResume() {
  super.onResume()

  window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}

答案 11 :(得分:3)

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

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

大功告成。

答案 12 :(得分:2)

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

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

当元素处于焦点状态时,键盘不会显示

答案 13 :(得分:0)

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

答案 14 :(得分:0)

只需在您的活动中添加:

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

答案 15 :(得分:0)

或者您可以在xml中使用可聚焦标签。

android:focusable =“ false”

将其设置为false。here is the snippet of the code

答案 16 :(得分:0)

声明此代码(android:windowSoftInputMode =“ stateAlwaysHidden”) 在您的活动标签内的清单中。

像这样:

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