アクティビティの開始時にキーボードが表示されないようにする


265

Edit Text入力のあるアクティビティがあります。アクティビティが初期化されると、Androidキーボードが表示されます。ユーザーが入力にフォーカスするまで、キーボードを非表示にしておくにはどうすればよいですか?


93
あなたのマニフェストで<activity android:windowSoftInputMode="stateHidden" ...>
馬鹿虎


1
と一緒に使用するにはandroid:windowSoftInputMode="adjustPan"
ヤーノシュ

4
@Jánosandroid:windowSoftInputMode = "adjustPan | stateHidden"
Alexey Strakh 2017

このコメントの答えは、私が探している答えでした:stackoverflow.com/a/23605510/6942602
korchix

回答:


436

以下がうまくいくと思います

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

私は以前、この種のものに使用したことがあります。


数字のみのキーパッドに設定する方法はありますか?すなわち12Keyキーボード?
Mohamed Khamis 2015

@MohamedKhamis input.setRawInputType(Configuration.KEYBOARD_12KEY);
blockwala

1
はい、まだ動作します。@SagarNayakなぜキーボードを非表示にしEditTextますか?:)これは、アクティビティの開始時にキーボードを非表示にするためのものですEditText
Martynas

@Devealte 7年後、私にとってはうまくいきましたが、onCreateに配置しましたか?
Dymas

@Dymasはい、そして数ヶ月前に修正しました:)
Devealte

180

これも試してください-

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ような値をすでに使用している場合は、次のような2つの値を組み合わせることができます。adjustResizeadjustPan

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

これにより、キーボードは適切に非表示になりますが、キーボードを表示する必要がある場合は、アクティビティビューをパンします。


3
コードとxmlの両方を表示していただきありがとうございます。実際、これが最も正解です。特に、おそらく3分で両方の方法を書いて、最初にできなかったので、;-)
eric

34

テーマを使用するすべてのアクティビティで非表示にします

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

テーマを設定する

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

このグローバルなアプローチのように。
Rm558、2015

1
これは、さまざまな場所でさまざまなテーマを使用していたときに機能しました
nmxprime

22

これら2つのプロパティを親レイアウトに追加します(例:線形レイアウト、相対レイアウト)

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

それはトリックを行います:)


2
これは私にとっては機能しませんが、trueジャックTの回答に従って、それらを機能するように設定します。最近のバージョンで動作の変更はありましたか?
Protean

私の回答に加えて、マニフェストと編集テキストにある他のプロパティも確認する必要があります。
大衆の王2018

私はそれらの中で最も基本的なプロパティを持っています。falseただし、これらの設定が機能する理由はわかりません。これは、EditTextボックスからフォーカスを外すことを目的としているためです。
Protean

多分それは親のレイアウトから離れてそれを編集テキストボックスから離れてフォーカスを取得するために使用されましたか?しかし、もうそうではないようです。
Protean

13

目録ファイルでそれを宣言してみてください

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

11

APIレベル21を使用している場合は、editText.setShowSoftInputOnFocus(false);を使用できます。



8

これをmanifest.xmlファイルに追加するだけです

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

これですべて完了です。


7

また、「問題」がある.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が別のレイアウトに含まれている場合の例:

<?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が直接フォーカス可能でないことを確認することです。
バイバイ!;-)


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

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

3

@Lucasが受け入れた回答を拡張するには:

初期のライフサイクルイベントの1つでのアクティビティからこれを呼び出します。

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

Kotlinの例:

override fun onResume() {
  super.onResume()

  window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}

2

各要素に対してこの設定された一意の属性を試すことができます

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

要素にフォーカスがある間、キーボードは表示されません


これは著者の質問に答えるかもしれませんが、説明的な単語やドキュメントへのリンクが不足しています。生のコードスニペットは、周りにいくつかのフレーズがないとあまり役に立ちません。また、良い答えの書き方も非常に役立ちます。回答を編集してください- レビューから
Nick

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

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);
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.