起動時の自動ポップアップキーボード


97

私は比較的簡単な質問をしました。EditTextがたくさんあるアクティビティがあります。アクティビティを開くと、最初のEditTextが自動的にフォーカスされ、仮想キーボードが表示されます。

どうすればこれを防ぐことができますか?


この質問に私の答えをチェックstackoverflow.com/questions/39593324/...
Androidのヘルプ

My AppがLaunch(open)で、テキスト編集ビューが使用可能な場合、キーボードは自動(表示)が有効になります。どのように唯一のこの問題は、こちらをクリックしてくださいeasycomacademy.com/...
AhmadUllahアフマド

回答:


209

XMLファイルのレイアウトタグでこの属性を使用します。

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

コメントで他のメンバーによって報告されているように機能しないScrollViewため、これらの属性をのメインの子に追加する必要がありますScrollView


3
これで私の問題も修正されました。これをアクティビティのRelativeLayoutタグに追加しました。ありがとうございました!
ルーク、

21
興味深いことに、上記をScrollViewに追加したときは機能しませんでしたが、LinearLayout
Jerry Brady

1
一番上のレイアウトに配置する必要があると思います
Utsav Gupta 2014

レイアウト自体にフォーカスがあると伝えているので、これはうまくいくと思いますか?それ以外の場合は、フォームの最初のコントロールにフォーカスを与える必要があると想定していますか?奇妙なことに、フォームのすべてのコントロールが無効になっている場合でも、キーボードを取得していました。今修正されました。ありがとうございました!
crowmagnumb 2014

1
このソリューションはアクセシビリティの問題(フォーカス可能であるべきでないビューにフォーカスがあるとマークされている)を引き起こし、意図しない結果をもたらす可能性があることに注意することが重要です。
Renato

96

これをAndroidマニフェストアクティビティに追加できます。

android:windowSoftInputMode="stateHidden|adjustResize"

これは機能しますが、画像の背景があり、ソフトキーボードがそのような画像の背景を縮小することを心配している場合は、android:windowSoftInputMode="stateHidden|adjustPan"
ArtiomLK

31

ここで説明するいくつかの実装がありますが、今度AndroidManifest.xmlは私Activityのプロパティに追加しました:

android:windowSoftInputMode="stateAlwaysHidden"

使っていても簡単な方法だと思いますfragments

" stateAlwaysHidden "アクティビティのメインウィンドウに入力フォーカスがある場合、ソフトキーボードは常に非表示になります。


これは、ScrollViewとRelativeLayoutの両方で私にとってはうまくいきました。
iversoncru 2015

「非表示状態」をすべてのフラグメントを含むアクティビティに関連付けているため、フラグメントにはそれほど適していません。つまり、アクティビティに表示するフラグメントは、プロパティによって影響を受けます(「フラグメントごと」ではなく) " 基礎)。
Pelpotronic 2015

11

のようにアクティビティの別のビューがある場合はListView、次のこともできます。

ListView.requestFocus(); 

onResume()でフォーカスを取得します editText

私はこの質問が答えられたことを知っていますが、私のために働いた代替ソリューションを提供しています:)



4

あなたの活動のコードでこれを使用してください:

@Override
public void onCreate(Bundle savedInstanceState) {

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

}

これは私にとってはうまくいきませんでした-私が活動を開始したときにキーボードがまだポップアップしました。
デビッドドリア

あなたは、このリンクをチェックすることができますそれは動作します:stackoverflow.com/questions/18977187/...
Sujeetクマールグプタ

3

Android 3.2.1をタブレットで使用すると、タブを切り替えるとキーボードが自動的にポップアップして表示されたままでも、同様の問題が発生しました。次の方法を使用します。

public void setEditTextFocus(EditText searchEditText, boolean isFocused)
{
    searchEditText.setCursorVisible(isFocused);
    searchEditText.setFocusable(isFocused);
    searchEditText.setFocusableInTouchMode(isFocused);
    if (isFocused) {
        searchEditText.requestFocus();
    } else {
        InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        inputManager.hideSoftInputFromWindow(searchEditText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS );
    }
}   

各EditTextのアクティビティのonCreate()およびonPause()で:

setEditTextFocus(myEditText、false);

各EditTextとOnTouchListenerについて:

    myEditText.setOnTouchListener(new EditText.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            setEditTextFocus(myEditText, true); 
            return false;
        }
    });

それぞれのためEditTextにありますOnEditorActionListener

    myEditText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
                            .......
            setEditTextFocus(myEditText, false); 
            return false;
        }
    });

そして、それぞれEditTextlayout xml

            android:imeOptions="actionDone"
            android:inputType="numberDecimal|numberSigned" // Or something else

おそらくもっと多くのコード最適化が可能です。


3
((InputMethodManager)getActivity().getSystemService("input_method")).hideSoftInputFromWindow(this.edittxt.getWindowToken(), 0);

フラグメントを使用する..このコードはキーボードを非表示にするために機能します...フラグメントが開いているときは、edittextフィールドキーボードへのフォーカスを避けます...
Sreelal S

2

私のために機能するこの簡単な解決策を見つけました。これらの属性を親レイアウトに設定します:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true" >

そして今、アクティビティが開始すると、このメインレイアウトがデフォルトでフォーカスされます。

また、次のように、メインレイアウトに再度フォーカスを与えることで、実行時に子ビューからフォーカスを削除できます。

findViewById(R.id.mainLayout).requestFocus();

それがあなたのために働くことを願っています。


1

これは私が使用しているソリューションであり、最良のソリューションではありませんが、私にとってはうまく機能しています

 editComment.setFocusableInTouchMode(false);
 editComment.setOnTouchListener(new OnTouchListener(){

                @Override
                public boolean onTouch(View v, MotionEvent event)
                {
                    // TODO Auto-generated method stub
                    editComment.setFocusableInTouchMode(true);
                     editComment.requestFocus() ;
                    return false;
                }});

1

興味深いことに、このドキュメントhttps://developer.android.com/training/keyboard-input/visibility.htmlは、アクティビティが開始されてフォーカスがテキストフィールドに与えられたときに、ソフトキーボードが表示されない(その後、コードを使用する場合は、キーボードを表示する方法を示します)。

私のSamsung Galaxy S5では、これが私のアプリ(マニフェストエントリまたは特定のコードなし)の動作方法です-ソフトキーボードはありません。ただし、Lollipop AVDでは、ソフトキーボードが表示され、上記のドキュメントに反します。

AVDでテストするときにこの動作が発生する場合は、実際のデバイスでテストして、何が起こるかを確認することができます。


1

これは、次の投稿でいくつかの良い答えがあります。EditTextがActivityの起動時にフォーカスを取得しないようにします。私が定期的に使用しているのは、Morganによる次のコードです。

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:focusable="true" 
    android:focusableInTouchMode="true"
    android:layout_width="0px" 
    android:layout_height="0px"/>

<!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again -->
<AutoCompleteTextView android:id="@+id/autotext"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:nextFocusUp="@id/autotext"     
    android:nextFocusLeft="@id/autotext"/>

注:ダミーアイテムは、フォーカス可能な要素の前に右に配置する必要があります。

ScrollViewでも完全に機能し、アクセシビリティについても問題はなかったと思います。


0

これは、アクティビティの開始時にEditTextが自動的にフォーカスを取得したときに発生します。したがって、これを修正する簡単で安定した方法の1つは、ボタンなどの他のビューに初期フォーカスを設定することです。

レイアウトXMLでこれを行うことができます。コードは必要ありません。


0

受け入れられた答えは私にとってはうまくいっていません、それが答えを与える解決策の理由です、それが役に立つかもしれません!

EditText edt = (EditText) findViewById(R.id.edt);
edt.requestFocus();    
edt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
edt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));

キーボードが開いています。


問題は、キーボードが開かないようにする方法でした。
jk7

0

android:windowSoftInputMode = "stateHidden | adjustResize"

正常に動作しています


0

以下のコードをアクティビティXMLの上部に追加し、ビューがEditTextの上にあることを確認します

<View 
android:layout_width="0dp"
android:layout_height="0dp"
android:focusableInTouchMode="true"/>

0

android:focusableInTouchMode="true"

XMLに上記の行を追加しEditTextたりTextInputLayout、フォーカスを持っているし、原因となっていますsoftInputKeyboardがポップアップします。

これで問題が解決し、キーボードがポップアップしなくなりました


0

search_edit_text =(EditText)findViewById(R.id.search_edit_text);

    search_edit_text.requestFocus();
    search_edit_text.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
    search_edit_text.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));

これは私のために動作しますフラグメントはいくつかの異なる構文を持っているかもしれません。これは活動のために働く


制限、仮定、または簡略化を回答に含める必要があります。このリンクで回答する方法の詳細をご覧ください:stackoverflow.com/help/how-to-answer
Usama Abdulrehman

-1

ビューにEditTextとListviewがある場合、デフォルトでキーボードが開きます。デフォルトでキーボードのポップアップを非表示にするには、次のようにします

this.listView.requestFocus();

editTextのビューを取得した後、リストビューへのフォーカスを要求していることを確認してください。

例えば

this.listView = (ListView) this.findViewById(R.id.list);
this.editTextSearch = (EditText) this.findViewById(R.id.editTextSearch);
this.listView.requestFocus();

そうすると、editTextにフォーカスが移り、キーボードがポップアップします。


私はこれを行いましたが、キーボードはまだポップアップし、フォーカスはeditTextにあります。
David Doria
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.