3

AlertDialog に EditText がありますが、それがポップアップしたときに、キーボードがポップアップする前にテキスト ボックスをクリックする必要があります。この EditText は XML レイアウトで "number" として宣言されているため、EditText をクリックするとテンキーがポップアップします。この余分なタップをなくして、AlertDialog がロードされたときにテンキーをポップアップさせたいと思います。

私が見つけた他のすべての解決策には、

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

数値キーボードではなく標準キーボードが表示されるため、これは受け入れられる解決策ではありません。XMLでレイアウトを定義したまま、できればAlertDialogで数値キーボードをポップアップさせる方法はありますか?

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 ハックを使用し続ける必要があると思いますが、数値入力が必要であることを Android に通知する必要もあります。

xml レイアウト属性の使用

このために、いくつかの xml 属性を EditText xml 定義に使用できます (使用可能なオプションについては、 android:inputTypeを参照してください)。

例:

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

また、 android:numericを使用して、デジタル キーボードを表示するように Android にヒントを与えたり、入力を受け入れ可能な文字に制限したりすることもできます

例:

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

プログラム的に

  • android:inputTypeにある TYPE_CLASS_NUMBER などの定数で EditText.setRawInputType(int) を使用します。

  • または TextView.setKeyListener(new NumberKeyListener())

編集

AlertDialog はデフォルトでポジティブ ボタンにフォーカスします。それがここで問題を引き起こしているようです。この同様の質問とその回答をご覧ください。

于 2011-09-25T09:26:23.427 に答える
0

編集ボックスのレイアウトxmlで指定してみてください。

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