Вот еще один способ сделать это, который позволяет пользователю по-прежнему редактировать число, если он хочет - он просто подавляет программную клавиатуру на начальном этапе. Используйте NumberPicker.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS)
, чтобы отключить экранную клавиатуру, когда интерфейс впервые отображается согласно ответам выше. Затем заставьте ваш диалог или занятие реализовать View.OnTouchListener
, вызовите setOnTouchListener(this)
на вашем NumberPicker
, а в вашей реализации onTouch(View v,MotionEvent e)
сбросьте фокусируемость потомков номерного выбора до его нормального значения, а затем верните false.
Возвращение false означает, что касание все еще обрабатывается NumberPicker, что означает, что если пользователь нажимает на поле редактирования, появляется программная клавиатура. Это как раз то, что я хотел, столкнувшись с той же проблемой - когда программная клавиатура выводит диалоговое окно, когда оно появляется впервые, вызывает недовольство, поскольку оно сдвигает диалоговое окно вверх после его появления.
public class GetBufferDialog extends DialogFragment implements View.OnTouchListener {
после создания диалога в методе onCreateDialog()
и поиска NumberPicker:
m_oldFocus = m_numberpicker.getDescendantFocusability();
m_numberpicker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
m_numberpicker.setOnTouchListener(this);
и вот метод OnTouch:
public boolean onTouch(View v, MotionEvent event) {
m_numberpicker.setDescendantFocusability(m_oldFocus);
return false;
}