在我的應用程式中,我有一個TextField和一個按鈕,可以顯示/隱藏 IME 鍵盤。我已經閱讀了關于控制軟鍵盤以及如何顯示或隱藏它的所有內容,但沒有閱讀如何切換. 這個 SO帖子是相關的,但不完全是我所要求的。
我遇到的問題是我需要跟蹤鍵盤何時打開和關閉。TextField當然可以通過點擊打開鍵盤,也可以通過按后退按鈕關閉它。我找不到這些操作的任何掛鉤或回呼,因此我可以分配isKeyboardOpen布林值。
因此,我可以從Toggle keyboard!按鈕切換鍵盤,但是一旦我“手動”打開它(點擊文本欄位)或關閉它(按后退按鈕),切換按鈕狀態就無法更新并且我需要按兩次才能顯示/隱藏鍵盤。
到目前為止,我已經嘗試了以下方法:
BackHandler- 沒有效果Modifier.pointerInput(Unit)withdetectTapGestures- 這些回呼永遠不會被點擊TextFieldonKeyEvent并且onPreviewKeyEvent- 它們似乎僅適用于硬體鍵盤按鍵。我試圖攔截后按,就像我們在 Android Views 世界中所做的那樣:action == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK,但沒有運氣
這是這兩個元素的代碼,如下面的 gif 所示:
Surface {
var isKeyboardOpen by remember { mutableStateOf(false) }
val keyboardController = LocalSoftwareKeyboardController.current
Column {
Button(onClick = {
isKeyboardOpen = !isKeyboardOpen
if (isKeyboardOpen) keyboardController?.show() else keyboardController?.hide()
}
) {
Text("Toggle keyboard!")
}
//...
BackHandler(isKeyboardOpen) {
Log.d("TextField", "backPressed - never called")
}
var text by remember { mutableStateOf("") }
TextField(
value = text,
onValueChange = { text = it },
modifier = Modifier.pointerInput(Unit) {
detectTapGestures(
onTap = { Log.d("TextField", "onTap - never called") },
onPress = { Log.d("TextField", "onPress - never called") },
)
}.onKeyEvent { event ->
// callback never hit
if (event.type == KeyEventType.KeyUp && event.key == Key.Back) {
//....
}
true
}
)
}
}
嘗試從按鈕切換鍵盤打開/關閉的 Gif
如何在撰寫中實作鍵盤切換按鈕?甚至有可能嗎?
uj5u.com熱心網友回復:
您可以使用 WindowInsets 來檢測鍵盤是打開還是關閉。
按照這些說明添加和設定伴奏插入庫。
設定后,您可以像這樣創建按鈕。
val insets = LocalWindowInsets.current
val keyboardController = LocalSoftwareKeyboardController.current
Button(onClick = {
if (insets.ime.isVisible) keyboardController?.hide() else keyboardController?.show()
}) {
Text("Toggle keyboard!")
}
uj5u.com熱心網友回復:
您可以為此使用 KeyboardVisibilityEvent 庫
KeyboardVisibilityEvent.setEventListener(
getActivity(),
new KeyboardVisibilityEventListener() {
@Override
public void onVisibilityChanged(boolean isOpen) {
// do your thing here !!
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/347664.html
標籤:安卓 科特林 android-jetpack-compose
