3

我在 AlertDialog 中有一个 EditText,但是当它弹出时,我必须在键盘弹出之前单击文本框。此 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 加载时,我仍然可以使用全键盘;没有它,我仍然一无所获。在任何一种情况下,点击文本框都会弹出数字小键盘。

再次编辑:

这是 EditText 的 XML

<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

4 回答 4

3

来晚了,但今天我遇到了同样的问题。这就是我解决它的方法:

当对话框打开时调用键盘,就像你做的那样:

 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);
于 2015-05-12T20:30:13.027 回答
2

只需尝试使用 setInputType() 设置 InputType。

EditText runs = (EditText)markRunsView.findViewById(R.id.runs_marked);
runs.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
于 2011-09-25T10:37:23.807 回答
1

我认为您应该继续使用 setSoftInputMethod hack,但也要向 android 提供您想要数字输入的提示。

使用 xml 布局属性

为此,您可以在 EditText xml 定义中使用多个 xml 属性(请参阅android:inputType了解可用选项)

例子:

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

您还可以提示 android 显示数字键盘并使用android:numeric将输入限制为可接受的字符

例子:

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

以编程方式

编辑

默认情况下,AlertDialog 焦点在肯定按钮上。看来这就是这里造成麻烦的原因。你可以看看这个类似的问题及其答案。

于 2011-09-25T09:26:23.427 回答
0

尝试在布局 xml 中为您的编辑框指定:

<EditText ...>
  <requestFocus/>
</EditText>
于 2011-09-25T18:34:15.307 回答