Показать программную клавиатуру (цифровую) с помощью AlertDialog.Builder - PullRequest
3 голосов
/ 25 сентября 2011

У меня есть EditText в AlertDialog, но когда он появляется, я должен нажать на текстовое поле, прежде чем раскроется клавиатура.Этот EditText объявляется в макете XML как «число», поэтому при нажатии на EditText появляется цифровая клавиатура.Я хочу исключить этот дополнительный касание и заставить всплывающую цифровую клавиатуру при загрузке AlertDialog.

Все остальные найденные мной решения включают использование

dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

Это НЕ приемлемое решение, так как это приводит к появлению стандартной клавиатуры, а не к появлению цифровой клавиатуры.У кого-нибудь есть способ заставить цифровую клавиатуру всплывать в AlertDialog, предпочтительно, сохраняя мой макет, определенный в XML?

AlertDialog dialog = new AlertDialog.Builder(this)
    .setTitle("Mark Runs")
    .setView(markRunsView)
    .setPositiveButton("OK", new DialogInterface.OnClickListener() {                        
        @Override
        public void onClick(DialogInterface dialog, int which) {
            EditText runs = (EditText)markRunsView.findViewById(R.id.runs_marked);
            int numRuns = Integer.parseInt(runs.getText().toString());
         // ...
        })
    .setNegativeButton("Cancel", null)
    .show();

Редактировать: Я хочу быть совершенно ясным, что мой макет уже имеет:

android:inputType="number"
android:numeric="integer"

Я также попробовал это:

//...
.setNegativeButton("Cancel", null)
.create();
EditText runs = (EditText)markRunsView.findViewById(R.id.runs_marked);
runs.setInputType(InputType.TYPE_CLASS_NUMBER);
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
dialog.show();

, но это также не сработало.С помощью строки setSoftInputMode я по-прежнему получаю полную клавиатуру при загрузке AlertDialog;без этого я все равно ничего не получу.В любом случае, нажатие на текстовое поле вызовет цифровую клавиатуру.

Редактировать еще раз:

Это XML для EditText

<EditText
    android:id="@+id/runs_marked"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="4dip"
    android:inputType="number"
    android:numeric="integer">
    <requestFocus/>
</EditText>

Ответы [ 4 ]

3 голосов
/ 12 мая 2015

Я немного опоздал, но сегодня у меня возникла та же проблема. Вот как я это решил:

Вызовите клавиатуру, когда диалоговое окно откроется так же, как вы:

 dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

Теперь в диалоге я предполагаю, что у вас есть поле EditText, которое принимает только цифры. Просто запросите фокусировку на этом поле, и стандартная клавиатура автоматически преобразуется в цифровую клавиатуру:

final EditText valueView = (EditText) dialogView.findViewById(R.id.editText);
valueView.requestFocus();

Теперь вам просто нужно помнить, чтобы закрыть клавиатуру, как только вы закончите с диалогом. Просто поместите это в положительный / отрицательный / нейтральный слушатель щелчка кнопки:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(valueView.getWindowToken(), 0);
2 голосов
/ 25 сентября 2011

Просто попробуйте установить InputType с помощью setInputType ().

EditText runs = (EditText)markRunsView.findViewById(R.id.runs_marked);
runs.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
1 голос
/ 25 сентября 2011

Я думаю, что вы должны продолжать использовать хак setSoftInputMethod, но также предоставлять подсказки для Android, что вы хотите числовой ввод.

Использование атрибутов макета XML

Длятаким образом, вы можете использовать несколько атрибутов xml в своем определении EditText xml (см. android: inputType для доступных опций)

Примеры:

<EditText android:inputType="phone" ...
<EditText android:inputType="number" ...
<EditText android:inputType="numberSigned" ...
<EditText android:inputType="numberDecimal" ...

Вы также можете обе подсказкиAndroid для отображения цифровой клавиатуры и ограничить ввод допустимыми символами с помощью Android: числовой

Примеры:

<EditText android:numeric="integer" ...
<EditText android:numeric="signed" ...
<EditText android:numeric="decimal" ...

Программно

  • Используйте EditText.setRawInputType (int) с константами, такими как TYPE_CLASS_NUMBER, которые вы найдете в android: inputType

  • или TextView.setKeyListener (new NumberKeyListener ())

EDIT

AlertDialog фокусируется по умолчанию на положительной кнопке.Кажется, это то, что вызывает проблемы здесь.Вы можете посмотреть этот похожий вопрос и его ответ.

0 голосов
/ 25 сентября 2011

Попробуйте указать в макете xml для своего поля редактирования:

<EditText ...>
  <requestFocus/>
</EditText>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...