Jetpack の androidx.compose.material3
ライブラリを使用すると、タッチペンを使用して、任意のアプリの TextField
コンポーネントに書き込むことができます。
タッチペン入力をデフォルトで有効にするには、アプリの build.gradle
ファイルにライブラリ依存関係を追加します。
Kotlin
dependencies { implementation("androidx.compose.foundation:foundation:LATEST_COMPOSE_VERSION") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "LATEST_EXTENSION_VERSION" } kotlinOptions { jvmTarget = "LATEST_JVM_VERSION" } }
Groovy
dependencies { implementation 'androidx.compose.foundation:foundation:LATEST_COMPOSE_VERSION' } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = 'LATEST_EXTENSION_VERSION' } kotlinOptions { jvmTarget = 'LATEST_JVM_VERSION' } }
TextField
Android 14 以降と androidx.compose.foundation:foundation:1.7.0
の依存関係では、すべての TextField
コンポーネントに対してタッチペン手書き入力がデフォルトで有効になっています。コンポーネントの手書き入力境界内でタッチペン モーション イベントが検出されると、TextField
の手書きモードが開始されます。
手書き入力の境界には、入力フィールドの周囲の垂直パディング 40 dp と水平パディング 10 dp が含まれます。
KeyboardType.Password
でインプット メソッド エディタがリクエストされた場合、TextField
フィールドでタッチペン手書き入力はサポートされません。
入力の委任
アプリは、テキスト入力フィールドのように見えるプレースホルダ UI 要素を表示できますが、実際にはテキスト入力機能を持たない単なる静的な UI 要素です。検索フィールドが一般的な例です。静的 UI 要素をタップすると、入力用の機能テキスト入力フィールドを含む新しい UI への遷移がトリガーされます。
タッチペン入力の委任
プレースホルダ入力フィールドでのタッチペン手書き入力をサポートするには、手書き入力委任 API を使用します(handwritingDetector
と handwritingHandler
を参照)。プレースホルダ UI 要素は、手書き入力を機能的な入力フィールドに委任するように構成されています。実装例については、HandwritingDetectorSample.kt
をご覧ください。
機能入力フィールドがフォーカスされ、InputConnection
が作成されると、タッチペン手書き入力モードが開始されます。
テスト
タッチペンの手書き入力は、互換性のあるタッチペン入力デバイスと、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 ベータ版を使用してテストしてください。
参考情報
- マテリアル デザイン - テキスト フィールド
- ユーザー入力を処理する