Отключить ввод с клавиатуры на Android TimePicker - PullRequest
26 голосов
/ 06 марта 2010

Я занимаюсь разработкой приложения для Android с использованием 1.6 SDK. Я использую TimePicker и не хочу, чтобы экранная клавиатура появлялась при нажатии на цифры в TimePicker. Я только хочу изменить TimePicker с помощью кнопок плюс и минус. Я пытался использовать android:focusable="false" и android:focusableInTouchMode="false", надеясь, что они это сделают, но, похоже, они ничего не делают. Есть ли способ сделать это?

Ответы [ 7 ]

53 голосов
/ 06 ноября 2010

попробуйте использовать:

myTimePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);

чтобы отключить фокусировку на текстовых представлениях внутренних NumberPickers

11 голосов
/ 14 июня 2015

Другой путь. Добавьте это в свой XML:

android:descendantFocusability="blocksDescendants"

3 голосов
/ 07 августа 2015

XML:

<NumberPicker
    ...
    android:descendantFocusability="blocksDescendants" />
2 голосов
/ 04 февраля 2013

Я только что попробовал (нацеливание на 4.0.3)

myTimePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);

безуспешно. После поиска в Google «Android TimePicker BLOCK_DESCENDANTS не работает» я последовал за хитом

http://code.google.com/p/android/issues/detail?id=38369

, где в последнем сообщении от «Участника проекта» говорится:

"Фокусируемость потомков относится к способности представления фокусироваться, как при обходе фокуса с использованием клавиатуры, трекбола или d-pad. Это не влияет на сенсорные события по дизайну.

Если вам нужно заблокировать сенсорные события из представления-потомка, рассмотрите возможность переопределения onInterceptTouchEvent в родительском представлении и возврата true, если требуется блокировка сенсорных событий. Это приведет к тому, что MotionEvents будет отправлено перехватывающему родителю до тех пор, пока последний указатель не поднимется. "

2 голосов
/ 08 января 2012

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

СначалаВы должны позвонить setInputType(InputType.TYPE_NULL) на editText.

Далее создайте экземпляр InputTypeManager:

InputMethodManager imm = 
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

И затем вызовите hideSoftInputFromWindow() для объекта imm, но с использованием InputMethodManager.HIDE_NOT_ALWAYS в качестве второго параметра вместо 0 (как рекомендуется впервый ответ):

imm.hideSoftInputFromWindow(editText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS)

Это предотвратит появление программной клавиатуры при нажатии / фокусировке этого элемента управления EditText, даже при использовании клавиши меню для выполнения операций копирования / вставки.

PS: если вы хотите запретить операции копирования / вставки, вы можете вызвать editText.setEditable(false), но тогда вы не сможете динамически изменять содержимое EditText.

0 голосов
/ 08 января 2012

Это не работает и для элементов управления EditText ... Если вы нажмете и удержите клавишу меню на тексте EditText, для которого вы установили InputType.TYPE_NULL и вызвали immhideSoftInputFromWindow(...), программная клавиатура все равно будет всплывают вместе с опциями меню копирования / вставки.

0 голосов
/ 06 марта 2010

Вы можете сделать это:

    InputMethodManager imm = 
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

Пожалуйста, обратитесь также к этому вопросу:

Закрыть / скрыть программную клавиатуру Android

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...