テキスト フィールドのタッチペン入力

Jetpack の androidx.compose.material3 ライブラリを使用すると、タッチペンを使用して、任意のアプリの TextField コンポーネントに書き込むことができます。

図 1. タッチペンによる手書き入力。

タッチペン入力をデフォルトで有効にするには、アプリの build.gradle ファイルにライブラリ依存関係を追加します。

Kotlin

dependencies {
    implementation("androidx.compose.foundation:foundation:1.7.0")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.1.1"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Groovy

dependencies {
    implementation 'androidx.compose.foundation:foundation:1.7.0'
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.1.1"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

TextField

Android 14 以降と androidx.compose.foundation:foundation:1.7.0 の依存関係では、すべての TextField コンポーネントに対してタッチペン手書き入力がデフォルトで有効になっています。コンポーネントの手書き入力境界内でタッチペン モーション イベントが検出されると、TextField の手書きモードが開始されます。

手書き入力の境界には、入力フィールドの周囲の垂直パディング 40 dp と水平パディング 10 dp が含まれます。

タッチペンのモーション イベントの検出範囲を示す長方形の周囲に表示される入力フィールド。
図 2. TextField コンポーネントの手書き入力境界。

KeyboardType.Password でインプット メソッド エディタがリクエストされた場合、TextField フィールドでタッチペン手書き入力はサポートされません。

入力の委任

アプリは、テキスト入力フィールドのように見えるプレースホルダ UI 要素を表示できますが、実際にはテキスト入力機能を持たない単なる静的な UI 要素です。検索フィールドが一般的な例です。静的 UI 要素をタップすると、入力用の機能テキスト入力フィールドを含む新しい UI への遷移がトリガーされます。

図 3. 静的 UI 要素からテキスト入力フィールドへの入力委任。

タッチペン入力の委任

プレースホルダ入力フィールドでのタッチペン手書き入力をサポートするには、手書き入力委任 API を使用します(handwritingDetectorhandwritingHandler を参照)。プレースホルダ UI 要素は、手書き入力を機能的な入力フィールドに委任するように構成されています。実装例については、HandwritingDetectorSample.kt をご覧ください。

機能入力フィールドがフォーカスされ、InputConnection が作成されると、タッチペン手書き入力モードが開始されます。

図 4. 静的 UI 要素からテキスト入力フィールドへのタッチペン入力の委任。

テスト

タッチペンの手書き入力は、互換性のあるタッチペン入力デバイスと、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 ベータ版を使用してテストしてください。

参考情報