web-dev-qa-db-ja.com

アクティビティ開始時にキーボードを自動ポップアップ

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

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

95
Galip

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

Android:focusable="true"
Android:focusableInTouchMode="true"

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

205
Vikas Patidar

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

Android:windowSoftInputMode="stateHidden|adjustResize"
95
UKDataGeek

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

Android:windowSoftInputMode="stateAlwaysHidden"

fragmentsを使用している場合でも、これは簡単な方法だと思います。

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

31
Jorgesys

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

ListView.requestFocus(); 

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

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

11
Sid

https://stackoverflow.com/a/11627976/5217837 これはほぼ正しい:

@Override
public void onCreate(Bundle savedInstanceState) {

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

}

ただし、SOFT_INPUT_STATE_ALWAYS_VISIBLEではなくSOFT_INPUT_STATE_HIDDENにする必要があります

5
Brent Young

これをアクティビティのコードで使用します。

@Override
public void onCreate(Bundle savedInstanceState) {

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

}
3
Bobs

タブレットで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;
        }
    });

そして、layout xmlEditTextごとに:

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

おそらくより多くのコード最適化が可能です。

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

私のために働いたこの簡単な解決策を見つけました。あなたの親レイアウトでこれらの属性を設定してください:

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

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

2
Salman Nazir

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

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

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

1
Steve Waring

これには、次の投稿でいくつかの良い答えがあります。 Activityの起動時にEditTextがフォーカスを取得しないようにする 。私が定期的に使用しているのは、 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でも完璧に機能するはずであり、アクセシビリティに関しても問題はなかったと思います。

1
Kaushik NP

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

 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
Paul Roosens

Android:windowSoftInputMode = "stateHidden | adjustResize"

正常に動作しています

0
Softlabsindia

受け入れられた答えは私のために機能していませんだから答えが機能する解決策を与えてください、それは役に立つかもしれません!

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

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

0
Yogesh Rathi

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

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

Android:focusableInTouchMode="true"

上記の行をEditTextまたはTextInputLayoutのxmlに追加します。これらはフォーカスを持ち、softInputKeyboardをポップアップさせます。

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

0

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

レイアウトXMLでこれを行うことができ、コードは不要です。

0
Mtl Dev