11

アプリに入るとすぐにソフトキーボードを表示する次のようなコードがあります。

@Override
protected void onResume() {
    super.onResume();

    ...

    myEditText.requestFocus();
    myEditText.postDelayed(new Runnable() {
        @Override
        public void run() {
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(myEditText, InputMethodManager.SHOW_IMPLICIT);
        }   
    }, 100);

    ...

}

ただし、Android 2.1エミュレーターでは、キーボードが表示された後、すぐに消えます。1000のように遅延を長くすると、確実に表示されます。Android 4.0エミュレーターでは、100の遅延は確実にキーボードを表示しますが、それより短い遅延は表示されません。

誰がキーボードを隠しているのか誰か知っていますか?それを防ぐための信頼できる方法はありますか?そうでない場合、キーボードが表示されることを保証するために使用できる遅延はありますか?

4

4 に答える 4

6

私があなたを正しく理解していれば、次のコードを削除できると思いますonResume()

myEditText.postDelayed(new Runnable() {
    @Override
    public void run() {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(myEditText, InputMethodManager.SHOW_IMPLICIT);
    }   
}, 100);

android:windowSoftInputMode="stateAlwaysVisible"マニフェストでアクティビティに使用するだけです。

于 2013-03-03T05:27:50.683 に答える
5

あなたが見ているのは、Androidがデフォルトでフォーカスを取得する必要があるビューを識別し、それにフォーカスを与える(キーボードを非表示にする)ことだと思います。遅延を長くまたは短く設定すると、そのフォーカスが設定される前または後にコードが実行されるようになります。デフォルトでどのビューがフォーカスされているかを把握できます。フォーカスを持たせたくない場合は、フォーカス可能な false および focusableInTouchMode false として設定します。ある時点でフォーカスが必要な場合は、onFocusChanged リスナーを設定し、初めてフォーカスを取得したときに、ランナブルを (遅延なく) 投稿して EditText にフォーカスを与え、キーボードを開くことができます。

于 2013-03-05T17:14:07.483 に答える
0

このコードをonRun()onResume()メソッドに入れます。

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

[編集]

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    text.requestFocus();

    text.postDelayed(new Runnable() {
        @Override
        public void run() {
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(text, InputMethodManager.SHOW_FORCED);
        }   
    }, 100);
    text.postDelayed(new Runnable() {
        @Override
        public void run() {
            InputMethodManager imm = (InputMethodManager)getSystemService(
                      Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(text.getWindowToken(), 0);
        }   
    }, 200);
}
于 2013-03-07T07:57:00.270 に答える