1

ユーザーがEditTextビューをクリックしたかどうかに関係なく、EditTextがフォーカスを取得したときに、ソフトキーボードを強制的に表示しようとしています。奇妙なことに、EditTextにフォーカスを取得させるアクションが、Dialog onClickアクションから発生した場合、キーボードは表示されません。

簡単な例を次に示します。main.xmlソース:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:focusable="true"
              android:focusableInTouchMode="true"
              android:clickable="true"
        >
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Hello World, MyActivity"
            />
    <Button android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Show Dialog"
            android:onClick="showDialog"/>
    <Button android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Set Input Focus"
            android:onClick="setInputFocus"/>
    <EditText android:id="@+id/myEditText"
            android:layout_width="fill_parent"
              android:layout_height="wrap_content"/>
</LinearLayout>

そして活動:

public class MyActivity extends Activity {

    EditText myEditText;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myEditText = (EditText)findViewById(R.id.myEditText);
        myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if(hasFocus){
                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.showSoftInput(myEditText,InputMethodManager.SHOW_IMPLICIT);
                } else {
                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
                }
            }
        });
    }

    public void showDialog(View v){
        new AlertDialog.Builder(this).setItems(new CharSequence[]{"Set Input Focus"}, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                myEditText.requestFocus();
            }
        }).create().show();
    }

    public void setInputFocus(View v){
        myEditText.requestFocus();
    }

}

「入力フォーカスの設定」ボタンをクリックすると、ビュー編集テキストにフォーカスが移り、キーボードが表示されます。ただし、ダイアログの[入力フォーカスの設定]項目をクリックすると、キーボードが短時間表示され、すぐに消えます(多くの場合、まったく表示されません)。ダイアログの終了により、クリックイベント中に開くように指示したキーボードが閉じているように見えますが、EditTextは引き続きフォーカスされています。

だから私の質問は、ダイアログがソフト入力ウィンドウを閉じるのを防ぐにはどうすればよいですか?:-)どんな提案も大歓迎です。ありがとうございました!

4

0 に答える 0