簡體   English   中英

使用AlertDialog.Builder顯示軟鍵盤(數字)

[英]Show soft keyboard (numeric) using AlertDialog.Builder

我在AlertDialog中有一個EditText,但是當它彈出時,我必須在鍵盤彈出之前單擊文本框。 此EditText在XML布局中聲明為“number”,因此當單擊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>

來得有點晚了,但今天我遇到了同樣的問題。 這就是我解決它的方式:

對話框打開時調用鍵盤就像你一樣:

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

現在,進入Dialog我假設你有一個只接受數字的EditText字段。 只需要關注該字段,標准鍵盤就會自動轉換為數字鍵盤:

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

現在,您必須記住在完成Dialog后關閉鍵盤。 只需將其放入正/負/中性按鈕單擊監聽器:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(valueView.getWindowToken(), 0);

只需嘗試使用setInputType()設置InputType。

EditText runs = (EditText)markRunsView.findViewById(R.id.runs_marked);
runs.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);

我認為你應該繼續使用setSoftInputMethod hack,但也向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:numeric將輸入限制為可接受的字符

例子:

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

編程方式

  • 使用EditText.setRawInputType(int)和常量,如TYPE_CLASS_NUMBER,你會在android:inputType中找到

  • 或TextView.setKeyListener(new NumberKeyListener())

編輯

默認情況下,AlertDialog焦點在正面按鈕上。 這似乎是造成麻煩的地方。 你可以看看這個類似的問題及其答案。

嘗試在編輯框的布局xml中指定:

<EditText ...>
  <requestFocus/>
</EditText>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM