Подтвердить что ты не робот

Отключить ввод клавиатуры на Android TimePicker

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

4b9b3361

Ответ 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);

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

Закрыть/скрыть Soft Keyboard Android

Ответ 7

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