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