web-dev-qa-db-ja.com

ソフトキーボードはEditTextフォーカスに1回だけ表示されます

読んでくれてありがとう。

私は奇妙な問題に直面しています。私のアプリの動作は、Activityが起動すると、EditTextrequestFocus()を実行してソフトキーボードを表示するというものです。

ただし、戻るボタンを押してキーボードを閉じ、EditTextをタップすると、キーボードが二度とポップアップしなくなります。唯一の方法は、Activityを再開することです。

私のコードは次のようになります。


EditText editText = (EditText) findViewById(R.id.editText);
editText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        if(imm != null) {
            imm.toggleSoftInput(0, 0);
            imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);    
        }

そして、これが私のXMLです。


<EditText Android:id="@+id/editText" 
        Android:layout_width="wrap_content"
        Android:imeOptions="actionSearch" Android:hint="Test Hint"
        Android:layout_height="wrap_content" Android:layout_centerHorizontal="true" 
        Android:maxLength="30"> 
</EditText>

どんな助けでも大歓迎です!

ありがとう!

18
Sagar Hatekar

Runnable内を開いたり、隠したりしてみてください。

開く

                 ettext.requestFocus();
                 ettext.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        InputMethodManager keyboard = (InputMethodManager)
                        getSystemService(Context.INPUT_METHOD_SERVICE);
                        keyboard.showSoftInput(ettext, 0);
                    }
                },200);

閉じる

                    ettext.requestFocus();
                    ettext.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        InputMethodManager keyboard = (InputMethodManager)
                        getSystemService(Context.INPUT_METHOD_SERVICE);
                        keyboard.hideSoftInputFromWindow(ettext.
                                                         getWindowToken(), 0);
                    }
                },200);
57
Lalit Poptani

入力ウィンドウを表示するために間違ったビューを使用しました。

EditText editText = (EditText) findViewById(R.id.editText);
editText.requestFocus();
InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null) {
    imm.showSoftInput(editText, 0); 
}
6
Ronnie

これを試して:

final InputMethodManager imm = (InputMethodManager)EnterWordsActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
    if (imm != null)
    {
        imm.toggleSoftInput(YOUE_EDTITE_TEXT.SHOW_FORCED,1);
    }
4

フォーカスを要求する前に力textField.clearFocus();をクリアするまで、上記のいずれも機能しないため、onResumeの最終的なコードは次のようになります。

   @Override
    public void onResume() {
        super.onResume();
        Log.d(TAG, "onResume: ");
        resumed = true;
        textField.postDelayed(new Runnable() {
            @Override
            public void run() {
                textField.clearFocus();
                textField.requestFocus();
                if (!editMode)
                    textField.getText().clear();
                inputMathodType = SharedPref.read(SharedPref.KEY_INPUT_MATHOD_SHARED_PREF, -1);
                setInputMethod();

            }
        }, 200);
    }
1
Hamza

アクティビティでこのコーディングを使用すると、キーボードが非表示になりますthis.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

0
Jagan