Отсутствует первый KeyEvent при использовании ComponentActivity.setContent() ⇐ Android

Форум для тех, кто программирует под Android
Anonymous
Отсутствует первый KeyEvent при использовании ComponentActivity.setContent()

Сообщение Anonymous »

Я хочу перехватывать все KeyEvents в Activity независимо от фокуса.
Минимальный рабочий пример:

Код: Выделить всё

class MainActivity : ComponentActivity() {
@SuppressLint("RestrictedApi")
override fun dispatchKeyEvent(event: KeyEvent): Boolean {
Log.d(TAG, "$event")
return super.dispatchKeyEvent(event)
}
}
Запустите действие, нажав на значок приложения, затем нажмите аппаратную клавишу (например, стрелку клавиатуры при использовании эмулятора). Я ожидаю 2 ключевых события: ACTION_DOWN, за которым следует ACTION_UP. Именно это мы и получаем:

Код: Выделить всё

App: ACTION_DOWN
App: ACTION_UP
Теперь, как только мы добавляем что-то на экран в Compose, нам не хватает самого первого события ACTION_DOWN:

Код: Выделить всё

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Text("Hello, world!")
}
}
/* rest is the same */
}
Мы получаем следующее:

Код: Выделить всё

Compose Focus: Owner FocusChanged(true)
App: ACTION_UP
Последующие нажатия клавиш работают:

Код: Выделить всё

Compose Focus: Owner FocusChanged(true)
App: ACTION_UP
App: ACTION_DOWN
App: ACTION_UP
Как избежать использования первого события миром Compose? Я пробовал использовать FocusRequester, но безрезультатно.

Подробнее здесь: https://stackoverflow.com/questions/793 ... setcontent

Вернуться в «Android»