Кастомная клавиатура

Интерфейс, диалоги, темы, стили, меню
Ответить
Smirnyga
Сообщения: 4
Зарегистрирован: 02 сен 2014, 19:32

Кастомная клавиатура

Сообщение Smirnyga » 06 мар 2016, 19:16

Доброго времени суток!Как сделать кастомную клавиатуру в собственном приложении?Весь Интернет обыскал,но не нашёл нормального ответа!Может быть,что-то недопонял.Помогите разобраться,пожалуйста!Все примеры в Интернете рассказывают,как сделать клавиатуру отдельным приложением,а мне надо ,чтобы она работала внутри только моего приложения.

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Кастомная клавиатура

Сообщение math64 » 08 мар 2016, 14:28

В своё время мне нужна была клавиатура эсперанто. Сейчас гугл добавил эсперанто в стандартную клавиатуру, и для меня это не актуально.
Тогда решение было такое: скачать приложение клавиатуры и добавить раскладку для своего языка. Но придётся поддерживать все языки, которые могут понадобиться - ведь исправленное приложение придется подписывать своим сертификатом и будет несовместимо с оригиналом.
Для конкретного приложения - можно разместить внизу формы LinearLayout с кнопками и android:visibility="gone" и открывать/закрывать его вместе/вместо с открытием/закрытием клавиатуры.

Smirnyga
Сообщения: 4
Зарегистрирован: 02 сен 2014, 19:32

Re: Кастомная клавиатура

Сообщение Smirnyga » 08 мар 2016, 17:30

Замечательный мануал - http://forum.xda-developers.com/showthr ... ?t=2497237 но немного не доработанный.

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Кастомная клавиатура

Сообщение math64 » 08 мар 2016, 22:37

Довольно сложно. Но обычно нужно не убирать ненужные клавиши, а добавлять недостающие.
AIDE добавляет над клавиатурой строку со скобками и другими операторами java, чтобы не нужно было переключать раскладки.
Его наверно сделать проще - добавить на форму компонент, который открывается/закрывается вместе с клавиатурой.

Аватара пользователя
An-droid
Сообщения: 51
Зарегистрирован: 25 авг 2015, 10:54

Re: Кастомная клавиатура

Сообщение An-droid » 11 мар 2016, 22:30

Изображение

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Кастомная клавиатура

Сообщение math64 » 12 мар 2016, 11:24

Кастомная клавиатура неудобна тем, что придётся поддерживать все языки. Для себя, конечно, можно ограничиться русским и английским.
Мне больше нравится как сделано в 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.

Smirnyga
Сообщения: 4
Зарегистрирован: 02 сен 2014, 19:32

Re: Кастомная клавиатура

Сообщение Smirnyga » 14 мар 2016, 19:22

Мне нужна была клавиатура с химическими элементами,поэтому мне по барабану на поддержку языков ;)

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Кастомная клавиатура

Сообщение math64 » 14 мар 2016, 20:02

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

Ответить