Nano Hash - криптовалюты, майнинг, программирование

Как приложение для Android загружает клавиатуру?

Мне нужно вызвать несколько разных клавиатур: «стандартную» клавиатуру с клавишами Ctrl и Alt; может быть, панель управления курсором; и так далее.

Я нашел класс Keyboard, который позволил бы мне определить клавиатуру в ресурсе XML. Я обнаружил, что класс KeyboardView имеет метод setKeyboard... и до сих пор я не нашел никакого другого класса, который принимает экземпляр Keyboard.

Как я должен использовать KeyboardView? Я попытался добавить его в XML своей активности; найти его во время выполнения с помощью findViewById; а затем вызов setKeyboard ... но все это испортило мою раскладку и не вызвало специальную клавиатуру.


Ответы:


1

Это оказывается очень выполнимым, и мои первоначальные проблемы, вероятно, были больше связаны с общей новизной Android (это мое первое приложение для Android), а не с KeyboardView. В частности, я привык к тому, что видимость является простым бинарным свойством.

Во всяком случае:

  1. Объявите KeyboardView в файле XML с помощью android:visibility="gone".
  2. Прежде чем сделать представление видимым, вызовите setKeyboard(), чтобы подключить клавиатуру. Это важно, так как KeyboardView получает свой размер от клавиатуры.
  3. Чтобы получить необработанные ключевые события, вызовите KeyboardView.setOnKeyboardActionListener(). После рефакторинга этой функциональности из Dialog обратно в мой основной View я поместил функциональность OnKeyboardActionListener в отдельный класс, но в этом нет необходимости.
  4. Я звоню keyboardView.setEnabled(true);. Это не кажется необходимым, но я (пока) не уверен, при каких обстоятельствах это будет иметь значение; возможно только если вы позвоните setEnabled(false).
  5. Я вызываю keyboardView.setPreviewEnabled(true); — это особенно полезно, если пользователь не будет получать визуальную обратную связь от входного биокса прямо над клавиатурой.
  6. Затем, установив клавиатуру, вызовите keyboardView.setVisibility(VISIBLE);.

Чтобы при необходимости скрыть клавиатуру, просто вызовите keyboardView.setVisibility(GONE);. Чтобы изменить клавиатуру (например, клавишу Shift или клавишу циклического переключения клавиатуры, просто снова вызовите setKeyboard. Я использую Map<<Integer, Keyboard> для реализации шаблона отложенного создания; может быть желательна слабая ссылка, если программа будет работать долго и клавиатура не будет часто использоваться.

25.10.2010
  • Я создал репозиторий GitHub с полным рабочим примером: github.com/tagadvance/android-keyboard- демо 25.10.2015

  • 2

    Keyboard и KeyboardView предназначены для создания механизмов альтернативного метода ввода (IME). Затем они могут быть выбраны пользователем так же, как они могут устанавливать Swype, Graffiti и другие приложения с Android Market.

    Вы, как разработчик, можете создать такой IME, но не можете навязать его пользователю.

    15.10.2010
  • Хм. Это раздражает - документы точно не намекают на то, что это классы IME. Спасибо. 15.10.2010
  • Это оказывается неправдой. См. ‹groups.google.com/group/android-platform/browse_thread/. нить/›. 19.10.2010
  • @Jon Shemitz: То, что написала мисс Хакборн, определенно больше подходит для вашего вопроса. Довольно интересно, что KeyboardView работает как обычный View -- это, конечно, не широко освещается, и я определенно не знал об этой возможности. Мои извенения. 19.10.2010

  • 3

    использование атрибута inputType в представлении editText поможет выбрать между различные системные клавиатуры (телефон, электронная почта и т. д.). Также в приложении APIDemos, которое поставляется с SDK, есть пример того, как реализовать принудительную пользовательскую клавиатуру только для вашего приложения.

    15.10.2010
  • Спасибо. Я не думаю, что inputType — это то, что мне нужно, но я посмотрю на приложение APIDemos. 15.10.2010
  • ОК, думаю, пора идти домой... но я просматривал исходный код APIDemos (и искал его) и ничего не вижу о создании пользовательской клавиатуры. Могу я побеспокоить вас для более подробного указателя? Заранее спасибо! 15.10.2010
  • моя ошибка, извините, что ввела вас в погоню за гусями, вот пример кода .google.com/p/android-misc-widgets/source/checkout 15.10.2010
  • Спасибо за обновления. Это хороший источник, но это не совсем то, что я ищу. Я хочу нативную клавиатуру Android с моим выбором клавиш, а не что-то, что выглядит и ощущается более или менее похоже на нативную клавиатуру. (В прошлой профессиональной жизни я видел, что случилось с компонентами Delphi, которые выглядели точно так же, как компоненты Win9x, когда появилась XP.) 15.10.2010
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..