Приветствую всех.
>на
> цифровых клавишах можно было бы вводить только цифры. Помогите
> пожалуйста,как это сделать без imputType?
Вы программно можете назначить свой InputFilter (и даже не один, используя
метод TextView.setFilter().
Для этого вам придётся самому написать реализацию InputFilter. Вот страница
с ответами на подобный вопрос:
https://stackoverflow.com/questions/3349121/how-do-i-use-inputfilter-to-limit-characters-in-an-edittext-in-android
Вот страница с тем же самым, но с корявым переводом на русский:
http://qaru.site/questions/40912/how-do-i-use-inputfilter-to-limit-characters-in-an-edittext-in-android
Это также был ответ на вопрос, как самому организовать фильтрацию ввода в
поле редактирования.
В Android есть несколько реализаций различных InputFilter (они перечислены
на странице документации), но вряд ли они вам подойдут. Документация:
https://developer.android.com/reference/android/text/InputFilter
> Кстати,хоть в этом смарте .нету
> стрелок вправо-влево,но будет ли onKeyListener отрабатывать эти
> стрелки,если я уберу inputType,поскольку когда были выбраны цифры,то
> onKeyListener отрабатывал вертикальные стрелки,но стрелки вправо-влево
> вообще не хотели обрабатываться,даже если я переношу весь код в метод
> activity onKeyUp.
Это вы на эмуляторе проверяли?
Имейте в виду, что в Android и так обработка клавиатурного ввода проходит не
без шероховатостей, но на эмуляторе из-за общих тормозов вы можете
столкнуться с заметным запаздыванием клавиатурных событий.
Всё-таки события KeyEvent и то, что пользователь вводит в поле
редактирования -- это не совсем одно и то же. Клавиши со стрелками не
фильтруются полем редактирования, так как это управляющие клавиши --
управляют курсором (если фокус в поле ввода) или фокусом ввода (в иных
случаях).
Поэтому атрибут inputType не должен влиять на работу методов onKey*, по
крайней мере, в части неалфавитных клавиш.
Вот примерно, что должно происходить при нажатии горизонтальных стрелок:
Если фокус в поле ввода, то клавиши с горизонтальными стрелками выполняют
перемещение курсора по символам. Когда пользователь пытается передвинуть
курсор за первый или за последний символ в поле ввода, то фокус переходит к
предыдущему / следующему элементу управления. Вопрос лишь в том, существует
ли этот предыдущий / следующий элемент и как система его определит. В таких
ситуациях для незрячего пользователя поведение фокуса может быть
неожиданным, поскольку система пытается выбрать предыдущий / следующий
элемент, исходя из визуального расположения элементов управления.
Логикой переходов фокуса можно управлять либо программно, либо задавая
соответствующие атрибут в xml-разметке.
> что мне лучше
> обрабатывать в моём случае,нажатие клавиши,или её отпускание?
Надо уточнять, что значит "лучше"...
Если вы хотите избежать многократной реакции на нажатие в случаях долгого
удержании клавиши нажатой, то обрабатывайте её отпускание.
Если пользователь удерживает клавишу нажатой более определённого времени, то
система начинает генерировать последовательность событий KeyDown так, как
будто пользователь нажимает клавишу много раз подряд.
Но событие KeyUp возникнет лишь один раз, когда пользователь реально
отпустит клавишу.
> Чтобы не смущать зрячих пользователей экранной клавиатурой с полным рядом
> цифр и букв, запретите её отображение.
> Извините пожалуйста за очень глупый вопрос,но где это нужно сделать,т.е
> в editText
Как вариант:
TextView.void setShowSoftInputOnFocus (boolean show)
См. TextView -- это базовый класс для EditText и в нём есть много
возможностей для манипуляции текстом.
Класс InputMethodManager тоже позволяет манипулировать экранной клавиатурой
(то есть "методом ввода" -- сокращённо IME).