Страница 1 из 1
Кастомная клавиатура
Добавлено: 06 мар 2016, 19:16
Smirnyga
Доброго времени суток!Как сделать кастомную клавиатуру в собственном приложении?Весь Интернет обыскал,но не нашёл нормального ответа!Может быть,что-то недопонял.Помогите разобраться,пожалуйста!Все примеры в Интернете рассказывают,как сделать клавиатуру отдельным приложением,а мне надо ,чтобы она работала внутри только моего приложения.
Re: Кастомная клавиатура
Добавлено: 08 мар 2016, 14:28
math64
В своё время мне нужна была клавиатура эсперанто. Сейчас гугл добавил эсперанто в стандартную клавиатуру, и для меня это не актуально.
Тогда решение было такое: скачать приложение клавиатуры и добавить раскладку для своего языка. Но придётся поддерживать все языки, которые могут понадобиться - ведь исправленное приложение придется подписывать своим сертификатом и будет несовместимо с оригиналом.
Для конкретного приложения - можно разместить внизу формы LinearLayout с кнопками и android:visibility="gone" и открывать/закрывать его вместе/вместо с открытием/закрытием клавиатуры.
Re: Кастомная клавиатура
Добавлено: 08 мар 2016, 17:30
Smirnyga
Re: Кастомная клавиатура
Добавлено: 08 мар 2016, 22:37
math64
Довольно сложно. Но обычно нужно не убирать ненужные клавиши, а добавлять недостающие.
AIDE добавляет над клавиатурой строку со скобками и другими операторами java, чтобы не нужно было переключать раскладки.
Его наверно сделать проще - добавить на форму компонент, который открывается/закрывается вместе с клавиатурой.
Re: Кастомная клавиатура
Добавлено: 11 мар 2016, 22:30
An-droid
Re: Кастомная клавиатура
Добавлено: 12 мар 2016, 11:24
math64
Кастомная клавиатура неудобна тем, что придётся поддерживать все языки. Для себя, конечно, можно ограничиться русским и английским.
Мне больше нравится как сделано в AIDE.
Пробовал добавить на форму TextView с образцами вводимого текста.
Добавил OnTouchListener в котором нахожу слово по клику на которое его нужно вставить в активный EditText.
← ↑ → ↓ работают как стрелки.
Код: Выделить всё
new Thread(new Runnable() {
@Override
public void run()
{
new Instrumentation().sendCharacterSync(keyCode);
}
}).start();
где keyCode - код клавиши определённой в KeyEvent. Есть коды для стрелок, но кодов для кириллицы там, естественно, нет.
Но
1) onConfigurationChanged() не вызывается при открытии/закрытии клавиатуры - вместе с которой я хочу прятать свой TextView
2) не знаю как вставить в EditText текст как если бы его набирали на клавиатуре, а не добавляли в конец.
PS: по второму пункту: если работать только с EditText, Instrumentation не нужен - нужные методы для вставки текта есть в Editable.
По первому - можно ловить получение и потерю фокуса EditText, причем при получении фокуса можно поменять текст с образцами свой для каждого EditText.
Re: Кастомная клавиатура
Добавлено: 14 мар 2016, 19:22
Smirnyga
Мне нужна была клавиатура с химическими элементами,поэтому мне по барабану на поддержку языков

Re: Кастомная клавиатура
Добавлено: 14 мар 2016, 20:02
math64
По любому, тебе кроме химических элементов, нужна стандартная русская и английская клавиатура - они должны быть включены в твою программу, чтобы переключаться между раскладками, а не клавиатурами.
Если тебе нужно только для твоей программы - по-моему, удобнее сделать как я.
Внизу формы добавь два невидимых компонента - listview с таблицей Менделеева и textview с наиболее часто употреблемыми элементами. При получении фокуса edittext, делается видимым textview. Если нужного элемента не видно, делаешь долгий там, клавиатура прячется и открывается listview. По короткому тапу на элемент он вставляется в edittext, по долгому тапу - показывается информация по нему, которую тоже можно вставить в редактор.
Кодировать меньше, чем для настоящей клавиатуры, но применимо только для одного приложения.