[英]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.