アクティビティの開始時にソフトキーボードを非表示にする方法


151

android:windowSoftInputMode="stateVisible"マニフェストにEdittextがあります。これで、アクティビティを開始するとキーボードが表示されます。それを隠す方法は?android:windowSoftInputMode="stateHiddenキーボードが表示されているときにアプリを最小化して再開すると、キーボードが表示されるはずなので、使用できません。私が試した

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

しかし、それはうまくいきませんでした。

回答:


1

xmlを使用したくない場合は、Kotlin拡張機能を作成してキーボードを非表示にします

// 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 Library

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

361

AndroidManifest.xml

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

または試す

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

こちらもご確認ください


3
ありがとう android:windowSoftInputMode="stateHidden"
シレンドラ・マダ

2
実際に防止エディットテキストに焦点を当てて上の偉大な答えもありstackoverflow.com/questions/4668210/...
ボリスTreukhov

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(メインアクティビティなどに含まれていない、または断片化されている場合)
Oliver Dixon

7
これを試すことができます。アクティビティから呼び出すと機能します。getWindow()。setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)‌;
SinanDizdarević16年

これをリスナー内から呼び出す必要がある場合はどうなりますか?以下のようなonFocusChange()
アンドレ・Yuhai

44

editTextの親ビューに2つの属性を追加するだけです。

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

36

これをActivityタグ内のマニフェストに入れます

  android:windowSoftInputMode="stateHidden"  

またはandroid:windowSoftInputMode = "stateUnchanged"-これは次のように機能します。まだ表示されていない場合は表示せず、アクティビティに入ったときに開いていた場合は開いたままにします)。
Sujeet Kumar Gupta

ええ、あなたは正しいです。しかし、向きが変わった場合はどうなりますか?
Saneesh

26

これを試して:

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

詳細については、こちらをご覧ください。


14

新しい活動を開始またはの時にsoftkeyboardを非表示にするにはonCreate()onStart()などあなたは、下のコードを使用することができます。

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

10

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

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

SOFT_INPUT_STATE_HIDDENの代わりにSOFT_INPUT_STATE_ALWAYS_HIDDENを使用します

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

5

このプロパティをmanifastsでアクティビティに追加します

android:windowSoftInputMode="stateHidden" 

4

このコードをJavaファイルに入れ、edittextのオブジェクトの引数を渡します。

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からキーボードを非表示にする方法が2つあることを簡単に説明します。例えば:

<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リテラル文字列ではなくフィールド(名前やヒントなど)を配置します。

次に、メソッドにはonCreateOptionsMenuComponentNameパッケージ名と完成したクラス名(パッケージ名付き)のオブジェクトが必要です- SearchViewコンポーネントを持つアクティビティが検索結果の表示と同じ場合getComponentName() -Googleの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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.