#android #kotlin
#Android #kotlin
Вопрос:
Я пытаюсь поддерживать ввод данных с игрового контроллера в своем приложении, я должен иметь возможность получать входные данные, находясь в фокусе любого элемента приложения. Кстати, это не игра. Я пытался следовать этому руководству из документации разработчика Android, но безрезультатно. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу переопределить функцию onKeyDown.
Мое единственное знание заключается в том, что мне нужно переопределить эту функцию либо в пользовательском представлении, либо в действии, но это то, с чем у меня возникли проблемы.
Вот какой код я пытаюсь использовать.
class customView(context:Context) : View(context){
override fun onKeyDown(...){
// Code to handle keydown
}
}
Я получаю сообщение об ошибке, в котором говорится что-то о том, что onKeyDown не является методом класса view (извините, в данный момент я не на своем компьютере, поэтому я не знаю точной ошибки)
В качестве еще одной заметки я также рассмотрел это о пользовательских представлениях, и я не совсем понимаю, как мне следует реализовывать ввод контроллера. Например, если бы я должен был создать новое представление, я бы предпочел переопределить что-то вроде фрагмента, который позволил бы мне вводить данные контроллера во всем приложении. Будет ли это работать лучше, переопределяя действие?
Я новичок в разработке Android и kotlin, поэтому прошу прощения, если это действительно просто.
Спасибо
Комментарии:
1. Какие параметры у вас есть, потому что он принимает параметры
keyCode: Int,event: KeyEvent
. developer.android.com/reference/android/view /…2. Я использовал параметры из документации, но это все равно не работает. Возможно, я делаю что-то неправильно в ссылке на XML-файл. Пожалуйста, не мог бы кто-нибудь привести пример XML-файла, ссылающегося на представление. Будет ли это работать при прослушивании событий контроллера, даже когда фокус переключается на другие представления или нет?
3. Совет: если вы хотите что-то переопределить, нажмите Ctrl O и выберите функцию из списка. IDE заполнит скелет функции для вас правильной подписью.
Ответ №1:
Вы забыли возвращаемый тип
class customView(context: Context) : View(context) {
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
return super.onKeyDown(keyCode, event)
}
}
Редактировать
Чтобы ответить на ваш вопрос в комментариях, чтобы добавить это представление в макет XML, вам нужно будет сделать что-то вроде этого
<package.of.my.costumview.customView
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
Комментарии:
1. Хорошо, я попробую это, когда смогу. Моя среда IDE показывает красную строку под переопределением, как будто в поле зрения нет метода onKeyDown. Пожалуйста, не могли бы вы сообщить мне, как я мог бы заставить это работать в файле XML, у меня тоже возникают трудности с этим.
2. IDE верна, нет
onKeyDown
метода с возвращаемым типомVoid
on theView class
. Я не знаю, что вы подразумеваете под работой с XML-файлом, не могли бы вы объяснить это лучше?3. О! Я вижу, чтобы добавить это представление в XML-файл, вам нужно использовать ссылку на пакет вашего пользовательского представления, я отредактирую свой ответ, чтобы лучше объяснить это
4.Я никогда не работал с контроллерами, возможно, попробуйте установить
android:clickable="true"
android:focusable="true"
в своем пользовательском представлении5. Ах, теперь это работает после добавления этого. Спасибо. Теперь определенно решено.