В конце концов, я не смог найти вид, из-за которого появлялась клавиатура. Я пытался удалить следующий фокус из каждого представления внутри TimePicker, но ничего. Затем я подумал, что проблема заключалась в том, что, поскольку я использовал счетчик 24-часового формата, виноват был скрытый AM / PM CustomTextView
внутри TimePicker
. Я сделал это без фокуса, но все та же проблема. Поэтому я пришел к выводу, что проблема заключалась в реализации самого TimePicker, который управляет каким-либо событием и отображает клавиатуру.
Поэтому я решил перебрать NumberPicker
внутри TimePicker
, которых три, и установить на них OnScrollListener
, который скрывает клавиатуру. Но все же, я вижу текстовую клавиатуру, появляющуюся перед тем, как меня увольняют Но это лучшее, что мне удалось сделать.
public static <T extends View> List<T> getViewsByClassNameFromView(ViewGroup viewGroup, Class<T> clazz) {
final List<T> matches = new LinkedList<>();
final int childCount = viewGroup.getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = viewGroup.getChildAt(i);
if (clazz.isInstance(child)) {
matches.add((T) child);
} else if (child instanceof ViewGroup) {
matches.addAll(getViewsByClassNameFromView((ViewGroup) child, clazz));
}
}
return matches;
}
public void hideSoftKeyboard(View view) {
InputMethodManager imm =
(InputMethodManager) view.getContext().getApplicationContext()
.getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
view.clearFocus();
}
private void fixTimePicker() {
final List<NumberPicker> numberPickers = ViewUtil.getViewsByClassNameFromView(timePicker, NumberPicker.class);
for (final NumberPicker numberPicker: numberPickers) {
numberPicker.setOnScrollListener(new NumberPicker.OnScrollListener() {
@Override
public void onScrollStateChange(NumberPicker view, int scrollState) {
hideSoftKeyboard(view);
}
});
}
}