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頭文字大文字、スペルチェック
2.キーボードの上下隅ボタンの意味を指名し、ユーザーにヒントを与える:android:imeOptions:actionSend、actionSearch;次に、キーの動作を監視できます.
3.制御入力方式の可視性:activity作成後、入力方式ポップアップが必要な場合は、manifestの下のactivityでandroid:windowSoftInputMode="stateVisible"を指定するかjavaコードで制御することができます.
入力方式が表示されると、プログラムで閉じるべきではなく、ユーザーに渡して閉じるべきです.
4.入力メソッドがポップアップされた後、UIがどのように応答するかを指定します.システムは入力メソッドがポップアップされた後、appのUIがどのように変化するかを処理してくれますが、システムのやり方は要求を満たすことができない場合があります.例えば、入力方式がポップアップされると、私たちのappの入力ボックスが入力方式で隠され、友好的な入力ができなくなります.この時、私たちは調整しなければなりません.解決策はmanifestの下のactivityでandroid:windowSoftInputMode="adjustResize"を指定することです
5.キーボードナビゲーションのサポート:android:nextFocusForwardの後の値は次のコントロールid android:nextFocusUp android:nextFocusDown android:nextFocusLeft android:nextFocusRight
6.リスニングキーイベント:単一キーの識別:
複数のキーを同時に認識:単一のキーに加えて、isShiftPressed()のようなものを追加して実現する.
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>