Я работаю над методом ввода для Android, и одной из задач является реализация настраиваемой всплывающей клавиатуры для жёстких нажатий клавиш. Обычно методы ввода позволяют редактору справиться с этим, но дело в том, что мне нужно добавить больше символов, чем поддерживает Android.
Поэтому я реализовал всплывающую клавиатуру и даже хорошо отображал ее, когда жёсткая клавиша (символьная клавиша) долго нажата.
Шаги, которые я выполнил:
- Создать всплывающее окно.
- Накачайте линейную раскладку, которая содержит вид с клавиатуры и кнопку закрытия, и сохраните ее в виде объекта
- привязать вид клавиатуры и кнопки закрытия к соответствующим объектам
- Создайте клавиатуру для всплывающих символов и установите ее в качестве клавиатуры для представления клавиатуры. Клавиатура имеет ограничение колонки 5.
- установить линейный макет в качестве представления содержимого для всплывающего окна
- Отображение всплывающего окна
ПРОБЛЕМА: Если во всплывающей клавиатуре несколько строк, я могу выбрать только клавишу в последнем ряду для столбца. Даже если я нажму на ключ в первом ряду этого столбца, ключ в последнем ряду будет выбран.
Если бы кто-нибудь мог объяснить, почему это происходит и как я могу это исправить, я был бы признателен.
КОД:
PopupWindow mPopupKeyboard = new PopupWindow(this.getBaseContext());
mPopupKeyboard.setBackgroundDrawable(null);
if(mPopupKeyboard != null)
{
this.dismissPopupKeyboard();
View mMiniKeyboardContainer = null;
KeyboardView mMiniKeyboard = null;
View closeButton = null;
mMiniKeyboardContainer = getLayoutInflater().inflate(R.layout.keyboard_popup_keyboard, null);
mMiniKeyboard = (KeyboardView) mMiniKeyboardContainer.findViewById(R.id.popup_keyboardView);
closeButton = mMiniKeyboardContainer.findViewById(R.id.closeButton);
if (closeButton != null)
{
closeButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
mPopupKeyboard.dismiss();
});
}
mMiniKeyboard.setOnKeyboardActionListener(this);
String resourcestring = "abcdefghi";
mMiniKeyboard.setKeyboard(new Keyboard(this.getBaseContext(), R.xml.kbd_popup_template, alternates, 3, 0));
mMiniKeyboard.setPopupParent(mCandidateView);
mPopupKeyboard.setContentView(mMiniKeyboardContainer);
mPopupKeyboard.setWidth(LayoutParams.WRAP_CONTENT);
mPopupKeyboard.setHeight(LayoutParams.WRAP_CONTENT);
mPopupKeyboard.showAtLocation(mCandidateView, Gravity.TOP, 0, 0);
}