Androidでのキーボード処理

4883 ワード

Androidに含まれるキーボード入力処理:
Androidでキーボード入力を使うところがEditTextです.私たちはそれを使うときに入力を受け入れるタイプを指定します.番号、emailなどがあります.指定した後、入力すると、キーボードは自動的に必要なキーボードタイプをポップアップします.Done,Nextのようなキーボード内のいくつかのキーの文字を定義することもできます.
1.キーボードタイプの指定:android:inputTypeここでの値は、phone,t e x t P a s s s w o r d textCapSentences|textAutoCorrect頭文字大文字、スペルチェック
<span style="font-size:14px;"><EditText
    android:id="@+id/phone"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/phone_hint"
    android:inputType="phone" /> </span>

2.キーボードの上下隅ボタンの意味を指名し、ユーザーにヒントを与える:android:imeOptions:actionSend、actionSearch;次に、キーの動作を監視できます.
<span style="font-size:14px;">EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        if (actionId == EditorInfo.IME_ACTION_SEND) {
            sendMessage();
            handled = true;
        }
        return handled;
    }
});</span>

3.制御入力方式の可視性:activity作成後、入力方式ポップアップが必要な場合は、manifestの下のactivityでandroid:windowSoftInputMode="stateVisible"を指定するかjavaコードで制御することができます.
<span style="font-size:14px;">	view.requestFocus();
	public void showSoftKeyboard(View view) {
    if (view.requestFocus()) {
        InputMethodManager imm = (InputMethodManager)
                getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
    }
}</span>

入力方式が表示されると、プログラムで閉じるべきではなく、ユーザーに渡して閉じるべきです.
4.入力メソッドがポップアップされた後、UIがどのように応答するかを指定します.システムは入力メソッドがポップアップされた後、appのUIがどのように変化するかを処理してくれますが、システムのやり方は要求を満たすことができない場合があります.例えば、入力方式がポップアップされると、私たちのappの入力ボックスが入力方式で隠され、友好的な入力ができなくなります.この時、私たちは調整しなければなりません.解決策はmanifestの下のactivityでandroid:windowSoftInputMode="adjustResize"を指定することです
5.キーボードナビゲーションのサポート:android:nextFocusForwardの後の値は次のコントロールid android:nextFocusUp android:nextFocusDown android:nextFocusLeft android:nextFocusRight
<span style="font-size:14px;"><RelativeLayout ...>
    <Button
        android:id="@+id/button1"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:nextFocusForward="@+id/editText1"
        ... />
    <Button
        android:id="@+id/button2"
        android:layout_below="@id/button1"
        android:nextFocusForward="@+id/button1"
        ... />
    <EditText
        android:id="@id/editText1"
        android:layout_alignBottom="@+id/button2"
        android:layout_toLeftOf="@id/button2"
        android:nextFocusForward="@+id/button2"
        ...  />
    ...
</RelativeLayout>


<Button
    android:id="@+id/button1"
    android:nextFocusRight="@+id/button2"
    android:nextFocusDown="@+id/editText1"
    ... />
<Button
    android:id="@id/button2"
    android:nextFocusLeft="@id/button1"
    android:nextFocusDown="@id/editText1"
    ... />
<EditText
    android:id="@id/editText1"
    android:nextFocusUp="@id/button1"
    ...  /></span>

6.リスニングキーイベント:単一キーの識別:
<span style="font-size:14px;">@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_D:
            moveShip(MOVE_LEFT);
            return true;
        case KeyEvent.KEYCODE_F:
            moveShip(MOVE_RIGHT);
            return true;
        case KeyEvent.KEYCODE_J:
            fireMachineGun();
            return true;
        case KeyEvent.KEYCODE_K:
            fireMissile();
            return true;
        default:
            return super.onKeyUp(keyCode, event);
    }
}</span>

複数のキーを同時に認識:単一のキーに加えて、isShiftPressed()のようなものを追加して実現する.
<span style="font-size:14px;">@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        ...
        case KeyEvent.KEYCODE_J:
            if (event.isShiftPressed()) {
                fireLaser();
            } else {
                fireMachineGun();
            }
            return true;
        case KeyEvent.KEYCODE_K:
            if (event.isShiftPressed()) {
                fireSeekingMissle();
            } else {
                fireMissile();
            }
            return true;
        default:
            return super.onKeyUp(keyCode, event);
    }
}</span>