在文字欄位中使用觸控筆輸入內容

Android 14 (API 級別 34) 以上版本可讓使用者將輸入內容寫入任何文字輸入內容 ] 欄位顯示內容Android 文字輸入欄位,包括 EditText 元件和 WebView 文字小工具、支援 預設以觸控筆輸入。

不過,如果您的應用程式需要自訂文字輸入欄位 (請參閱自訂文字 編輯者) 或 採用複雜的版面配置,而且文字輸入欄位疊加在繪圖介面上,而 就必須自訂應用程式

圖 1. 使用觸控筆手寫輸入。

EditText

根據預設,Android 14 的所有 EditText 欄位都會啟用觸控筆手寫功能 以及更高版本觸控筆動作時,EditText 會啟動手寫模式 在檢視畫面的手寫範圍內偵測到事件。

手寫邊界包括垂直邊框間距 40 dp,以及水平 10 dp 也就是檢視區塊周圍的邊框間距使用 setHandwritingBoundsOffsets()。 停用手寫輸入功能 setAutoHandwritingEnabled(false)

周圍矩形的輸入欄位,代表偵測觸控筆動作事件的邊界。
圖 2. EditText 欄位的手寫界限。

輸入委派

應用程式可以顯示預留位置 UI 元素,這些元素看起來是文字輸入欄位,但 其實只是靜態的 UI 元素,沒有文字輸入功能。搜尋 都是常見的範例輕觸靜態 UI 元素會觸發轉場效果 新版 UI,其中包含聚焦於輸入的函式文字輸入欄位。

圖 3. 從靜態 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、 啟動觸控筆手寫模式。

圖 4. 觸控筆輸入委派 (從靜態 UI 元素到文字輸入欄位)。

質感設計

com.google.android.material.search敬上 程式庫提供 SearchBarSearchView 門課程 以便實作預留位置 UI 模式。

預留位置和功能性搜尋檢視會與 setUpWithSearchBar()

手寫委派功能是在 Material 程式庫中設定,沒有 所需的開發作業。

與繪圖介面重疊

如果應用程式有繪圖介面,且文字欄位重疊在介面上, 可能要停用觸控筆手寫功能,才能讓使用者繪圖。詳情請見 setAutoHandwritingEnabled()

測試

觸控筆手寫功能適用於搭載 Android 14 以上版本的裝置,且支援 相容的觸控筆輸入裝置和輸入法 編輯者 (IME) 支援 Android 14 觸控筆手寫 API。

如果你沒有觸控筆輸入裝置,請在任何裝置上模擬觸控筆輸入模式 具備 Root 存取權 (包括模擬器) 使用下列 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 Beta 版進行測試 觸控筆。

其他資源