こんにちは。 この記事では、Android用の独自のキーボードを作成する主なポイントを説明し、表示しようとします。 この記事は、これに遭遇したことはないが、Androidの経験がある開発者を対象としています。
著者の意見とコードは最後の手段では真実ではなく、あなたの提案と批判は大歓迎です。 また、すべてを読みたくない場合は、記事の最後にあるソースへのリンクをご覧ください。
最初に、アクティビティなしで空のAndroidプロジェクトを作成する必要があります。 その後、Androidのキーボードを記述する.xmlファイルの準備を始めましょう。
基本レイアウトファイル、keyboard.xmlこれには、KeyboardViewというView Androidクラスが含まれており、キーボードの外観について説明しています。
<?xml version="1.0" encoding="utf-8"?> <android.inputmethodservice.KeyboardView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/keyboard" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:keyPreviewHeight="35dp" android:keyPreviewLayout="@layout/preview" />
属性:- android:keyPreviewHeight-現在押されているキーが表示されるツールチップの高さを設定します。
- android:keyPreviewLayout-プレビューの外観を記述するレイアウトファイルを指定します。
プレビューコード: <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:background="@color/key_preview_background" android:textColor="@color/key_preview_text_color" android:textStyle="bold" android:textSize="25sp" />
重要な点は、バックグラウンド属性が必要です。指定しない場合、キーを押すたびにキーボードが落ちます。
レイアウトの説明そのため、外観を説明する2つの.xmlファイルを準備しました。今度は、キーボードレイアウト自体を説明します。 このファイルをkeys_definition_ru.xmlと呼び、プロジェクトのxmlリソースに配置されます。 ファイルは非常に大きいため、ここではその一部のみを示します。
<?xml version="1.0" encoding="utf-8"?> <Keyboard xmlns:android="http://schemas.android.com/apk/res/android" android:keyWidth="7.5%p" android:horizontalGap="5px" android:verticalGap="0px" android:keyHeight="40dp"> <Row> <Key android:codes="-1" android:keyIcon="@drawable/ic_keyboard_capslock_white_24dp" android:keyWidth="13%p" android:keyEdgeFlags="left" /> <Key android:codes="1103" android:keyLabel="" /> <Key android:codes="1095" android:keyLabel="" /> <Key android:codes="1089" android:keyLabel="" /> <Key android:codes="1084" android:keyLabel="" /> <Key android:codes="1080" android:keyLabel="" /> <Key android:codes="1090" android:keyLabel="" /> <Key android:codes="1100" android:keyLabel="" /> <Key android:codes="1073" android:keyLabel="" /> <Key android:codes="1102" android:keyLabel="" /> <Key android:codes="-5" android:keyIcon="@drawable/ic_backspace_white_24dp" android:isRepeatable="true" android:keyEdgeFlags="right" android:keyWidth="13%p" /> </Row> </Keyboard>
属性:すべての属性を説明するのではなく、「明白ではない」だけを説明します。
- android:horizontalGap-キー間の水平インデント
- android:verticalGap-垂直インデント
- android:codes-html utf-8の目的の文字のコード(utf-8だけでなく、公式ドキュメントにもあります)
- android:keyEdgeFlags-属性は左または右の値を使用できます。 これらの属性は、キーボードの左端または右端にあるキーに追加されます
- android:isRepeatable-キーのアクションを長押しで繰り返します(通常はスペースまたはバックスペースで使用されます)
最後のファイルは、ローカリゼーションの説明(入力のサブタイプ)です。
<?xml version="1.0" encoding="utf-8"?> <input-method xmlns:android="http://schemas.android.com/apk/res/android"> <subtype android:label="@string/subtype_en_US" android:imeSubtypeLocale="en_US" android:imeSubtypeMode="keyboard" /> <subtype android:label="@string/subtype_ru_RU" android:imeSubtypeLocale="ru_RU" android:imeSubtypeMode="keyboard" /> </input-method>
InputMethodService-キーボードサービスここで、必要なすべてのxmlファイルを作成した後、
InputMethodイベントをリッスンするサービスの説明に進みます。
これを行うには、
InputMethodServiceを
継承するサービスを作成し、
KeyboardView.OnKeyboardActionListenerインターフェイスをすぐに実装します。 結果として、キーボードを幅広くカスタマイズできるようにするために必要な機能をオーバーライドおよび入力できる一連のメソッドを取得します。 ただし、ここでは基本的なポイントの例を示します。
OnCreateInputViewおよびonKeyメソッド @Override public View onCreateInputView() { mKeyboardView = (KeyboardView) getLayoutInflater().inflate(R.layout.keyboard, null); mKeyboard = new Keyboard(this, R.xml.keys_definition_ru); mKeyboard.setShifted(isCapsOn);
InputMethodServiceライフサイクルのメソッドの1つはonCreateInputViewで、その中にキーボードのビューを作成し、必要なリスナーをバインドします。
onKeyイベントは、onPressとonReleaseの間に発生し、押されたキーのコードが入力されます。
これで、すべての準備が整いました...ほとんど、マニフェストにサービスを追加することが残っています。
<service android:name=".SimpleIME" android:label="@string/simple_ime" android:permission="android.permission.BIND_INPUT_METHOD"> <meta-data android:name="android.view.im" android:resource="@xml/method" /> <intent-filter> <action android:name="android.view.InputMethod" /> </intent-filter> </service>
おめでとうございます、あなたは最初のキーボードを書きました!
→
キーボードのソースコード (デフォルトでは大文字が含まれます)
→
公式ドキュメント/チュートリアル