Установка явного фокуса на редакторе/программной клавиатуре метода ввода в Android

Я работаю со стандартным редактором метода ввода программной клавиатуры Android. Я показываю программную клавиатуру на своем эмуляторе Android после того, как была нажата определенная клавиша, и в фокусе находится представление редактирования текста. Моя цель - установить фокус на программной клавиатуре после ее появления на экране. Я знаю, что программные клавиатуры обычно используются для ввода без жесткой клавиатуры, но в моем случае разрабатываемое мной приложение нуждается в этой функции, поскольку оно будет работать на пользовательском устройстве, а исходный код Android модифицируется для пользовательской функциональности. Кто-нибудь знает, как решить эту проблему? Возможно ли, что сенсорный режим не позволяет установить фокус на клавиатуре?

РЕДАКТИРОВАТЬ: уточнение

Извините за двусмысленность. В основном мне требуются следующие функции от программной клавиатуры в следующем случае.

  1. Пользователь помещает курсор (используя клавиатуру) в EditText. Поскольку он использует клавиатуру, приложение не будет отображать программную клавиатуру.
  2. Пользователь нажимает СПЕЦИАЛЬНУЮ клавишу на клавиатуре, чтобы вызвать экранную клавиатуру.
  3. Фокус должен измениться с EditText на ПРОГРАММНУЮ КЛАВИАТУРУ, что означает, что пользователь должен иметь возможность перемещаться и выбирать клавиши на программной клавиатуре с помощью жесткой клавиатуры. Конечно, это означает, что ключевые события должны быть добавлены к стандартной программной клавиатуре.
  4. После того, как пользователь выбирает клавишу, он нажимает ввод (например), и ключевой символ должен появиться в тексте редактирования.

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

Lauren Я думаю, вы правы в том смысле, что стандартная программная клавиатура реализована как сервис и не подчиняется правилам обычных представлений.

Любые советы приветствуются.

Спасибо


person solarc    schedule 16.09.2011    source источник
comment
Пожалуйста, уточните, что вы хотите, хотите ли вы, чтобы программная клавиатура опускалась или не опускалась. ХОТИТЕ ли вы ключевые события .. Я имею в виду, что я ничего не получаю из вашей теории, что именно вы хотите   -  person Abhinav Singh Maurya    schedule 16.09.2011


Ответы (1)


Я думаю, что здесь есть два вида «фокуса»:

  • Фокус EditText необходим, чтобы гарантировать наличие только одного получателя для событий клавиатуры.
  • Фокус клавиатуры, что означает, что клавиатура видна и клавиши можно нажимать.

Насколько я понимаю, в Android фокус получает только EditText. Клавиатура работает в службе и получает события касания благодаря специальным Insets< /а> класс.

Если все, что вам нужно, это заставить вашу клавиатуру видимость, вы должны попробовать ответы из этот вопрос.

ИЗМЕНИТЬ

Я думаю, что есть два способа сделать это в зависимости от того, хотите ли вы, чтобы эта клавиатура была специфичной для действия или была доступна везде.

  • Особое действие

Насколько я понимаю, служба inputmethod, отвечающая за отображение клавиатуры, не позволит вам этого добиться.

Мой лучший совет заключается в том, что вы создаете специализированное представление клавиатуры, которое имеет эту функцию «фокусируемых клавиш» (расширение представления клавиатуры было бы хорошей отправной точкой).

Вы можете изменить видимость клавиатуры (используя View.VISIBLE и View.GONE), чтобы она появлялась и исчезала.

Затем вы должны запрограммировать свое собственное поведение, чтобы выделить ключ с фокусом и соответствующим образом переместить его.

Ваша активность также должна помнить последний EditText, который имел фокус для отправки ему текста или кодов клавиш.

  • Для всей системы

Если вам нужно, чтобы это поведение было доступно везде в системе, вы должны указать свой собственный служба метода ввода. Я советую вам взглянуть на этот пост как а также пример SoftKeyboard в SDK.

Обратите внимание, что вам также потребуется создать собственный вид клавиатуры, как описано выше, но без необходимости запоминать фокус EditText.

person Laurent'    schedule 16.09.2011
comment
Теперь я лучше понимаю, как мне реализовать эту функциональность. Спасибо за совет. - person solarc; 18.09.2011
comment
Начните с образца SDK SoftKeyboard (ссылка в ответе) и настройте поведение LatinKeyboardView. - person Laurent'; 18.09.2011
comment
@solarc, ты можешь этого добиться? Если да, сообщите нам, какие изменения требуются в пользовательском классе KeyboardView. Спасибо - person CodeFury; 04.04.2014