Отключить ввод с клавиатуры на Android TimePicker
Я разрабатываю и приложение для Android, используя 1.6 SDK. Я использую TimePicker
и я не хочу, чтобы при нажатии на цифры в TimePicker
, Я хочу только TimePicker
должны быть изменены с помощью кнопок плюс и минус. Я пытался использовать android:focusable="false"
а также android:focusableInTouchMode="false"
надеясь, что они это сделают, но, похоже, они ничего не делают. Есть ли способ сделать это?
7 ответов
Попробуй использовать:
myTimePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);
отключить фокусировку на текстовых представлениях внутренних NumberPickers
По-другому. Добавьте это в свой XML:
android:descendantFocusability="blocksDescendants"
XML:
<NumberPicker
...
android:descendantFocusability="blocksDescendants" />
Я только что попробовал (таргетинг на 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 будет отправлено перехватывающему родителю, пока последний указатель не поднимется."
Не знаю, работает ли это для 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.
Вы можете сделать это:
InputMethodManager imm =
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
Пожалуйста, обратитесь к этому вопросу, а также:
Это не работает ни для элементов управления EditText... Если вы нажимаете и удерживаете клавишу Menu на EditText, на котором вы установили InputType.TYPE_NULL
и называется immhideSoftInputFromWindow(...)
, программная клавиатура все равно появится вместе с опциями меню копирования / вставки.