1

アクティビティが開始されると、エディットテキストは自動的にフォーカスを取得しますが、ソフトキーボードが表示されません。さらに、プログラム.requestFocus()でビューを呼び出すと、フォーカスは得られますが、ソフトキーボードは表示されません。ビューの例は次のとおりです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="10dp">

 <EditText
    android:id="@+id/editTextTransactionName"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/edittext_description"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:imeOptions="actionNext"
    android:inputType="text"/> 
</LinearLayout>

ソフトキーボードは、クリックした場合にのみ表示されるようです。これがデフォルトの動作になる理由はありますか?フォームとして使用されるアクティビティを開くと、すぐにデータを入力できるようにキーボードが表示されることを直感的に期待します。

4

1 に答える 1

2

これを読むことを検討してください: Android アクションバー タブとキーボード フォーカス

requestFocus は非常に信頼できません。

どうやらそれはデフォルトの動作ではありません。キーボードを自動的に表示したい場合は、 内で「タップ」をシミュレートします。EditTextこれが私にとってはうまくいきました (これは、showSoftInputの動作が信頼できないため、呼び出すよりも安全requestFocusです。さらに、キーボードを細かく管理する必要はありません)。

EditText tv = (EditText)findViewById(R.id.editText);
tv.post(new Runnable() {

            @Override
            public void run() {
                Log.d("RUN", "requesting focus in runnable");
                tv.requestFocusFromTouch();
                tv.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , tv.getWidth(), tv.getHeight(), 0));
                tv.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , tv.getWidth(), tv.getHeight(), 0));
            }
        });

キーボードが開かない理由は、ユーザーが最初に編集を開始する場所を決定する前に、ウィンドウ全体を見る機会が必要だからだと思います。

于 2012-09-04T19:38:42.707 に答える