Отключить ввод с клавиатуры на 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);

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

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

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

Другие вопросы по тегам