Android 14(API レベル 34)以降では、タッチペンを使用して、アプリ内の任意のテキスト入力フィールドに書き込むことができます。EditText
コンポーネントや WebView
テキスト ウィジェットなどの Android テキスト入力フィールドは、デフォルトでタッチペン入力をサポートしています。
ただし、アプリでカスタム テキスト入力フィールドが必要な場合(カスタム テキスト エディタを参照)、またはテキスト入力フィールドが描画サーフェスに重なる複雑なレイアウトの場合は、アプリをカスタマイズする必要があります。
EditText
Android 14 以降では、デフォルトですべての EditText
フィールドでタッチペン手書き入力が有効になっています。ビューの手書き入力境界内でタッチペン モーション イベントが検出されると、EditText
の手書きモードが開始されます。
手書き入力の境界には、ビューの周囲の垂直パディング 40 dp と水平パディング 10 dp が含まれます。setHandwritingBoundsOffsets()
を使用して、手書き入力の境界を調整します。setAutoHandwritingEnabled(false)
を使用して手書き入力を無効にします。
入力の委任
アプリは、テキスト入力フィールドのように見えるプレースホルダ UI 要素を表示できますが、実際にはテキスト入力機能を持たない単なる静的な UI 要素です。検索フィールドが一般的な例です。静的 UI 要素をタップすると、入力用の機能テキスト入力フィールドを含む新しい UI への遷移がトリガーされます。
タッチペン入力の委任
プレースホルダ入力フィールドでのタッチペン手書き入力をサポートするには、手書き入力委任 API を使用します(setHandwritingDelegatorCallback()
と setIsHandwritingDelegate()
を参照)。プレースホルダ UI 要素は、手書き入力を機能する入力フィールドに委任するように構成されています。次に例を示します。
Kotlin
if (Build.VERSION.SDK_INT >= 34) { placeholderInputField.setHandwritingDelegatorCallback { showAndFocusDelegateInputField() } delegateInputField.setIsHandwritingDelegate(true) }
Java
if (Build.VERSION.SDK_INT >= 34) { placeholderInputField.setHandwritingDelegatorCallback(this::showAndFocusInputFieldDelegate); delegateInputField.setIsHandwritingDelegate(true); }
プレースホルダ テキスト入力フィールド ビュー上でタッチペンを動かすと、コールバックが呼び出されます。
コールバックは UI の遷移をトリガーし、関数の入力フィールドを表示してフォーカスします。コールバックの実装は通常、プレースホルダ要素でのクリック リスナーの実装と同じです。関数入力フィールドによって InputConnection
が作成されると、タッチペン手書き入力モードが開始されます。
マテリアル デザイン
com.google.android.material.search
ライブラリには、プレースホルダ UI パターンの実装を容易にする SearchBar
クラスと SearchView
クラスが用意されています。
プレースホルダと機能検索ビューは setUpWithSearchBar()
とリンクされています。
手書き入力の委任はマテリアル ライブラリで設定されるため、アプリで追加の開発を行う必要はありません。
描画サーフェスと重なる
アプリの描画サーフェスにテキスト フィールドが重なっている場合、ユーザーが描画できるようにするには、タッチペンの手書き入力を無効にする必要があります。setAutoHandwritingEnabled()
をご覧ください。
テスト
タッチペンの手書き入力は、互換性のあるタッチペン入力デバイスと、Android 14 のタッチペン手書き入力 API をサポートするインプット メソッド エディタ(IME)を備えた Android 14 以降のデバイスでサポートされています。
タッチペン入力デバイスがない場合は、次の Android Debug Bridge(adb)コマンドを使用して、ルートアクセス権限のあるデバイス(エミュレータを含む)でタッチペン入力をシミュレートします。
// Android 14
adb shell setprop persist.debug.input.simulate_stylus_with_touch true && adb shell stop && adb shell start
// Android 15 and higher
// Property takes effect after screen reconfiguration such as orientation change.
adb shell setprop debug.input.simulate_stylus_with_touch true
タッチペンに対応していないデバイスを使用している場合は、Gboard ベータ版を使用してテストしてください。
参考情報
- マテリアル デザイン - テキスト フィールド
- カスタム テキスト エディタ