Отсутствует первый 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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