web-dev-qa-db-ja.com

「電話」ソフトキーパッドでInputType = numberDecimalを使用するにはどうすればよいですか?

EditTextボックスの場合、ユーザーは有効な数値のみを入力する必要があるため、Android:inputType="numberDecimal"を使用しています。残念ながら、Androidが表示するソフトキーボードの番号は一番上の行にのみありますが、次の3つの行には他のさまざまな記号(ドル記号、パーセント記号、感嘆符、スペースなど)があります)。 numberDecimalは0〜9、負符号、および小数点のみを受け入れるため、「電話」ソフトキーボード(3x3グリッドの0〜9とその他の記号)を使用する方が理にかなっています。これにより、ボタンが大きくなり、ヒットしやすくなります(同じ画面領域の10x4グリッドではなく4x4グリッドであるため)。残念ながら、Android:inputType="phone"を使用すると、括弧などの非数値文字が許可されます

Android:inputType="numberDecimal|phone"を使用しようとしましたが、ビットフラグのnumberDecimalアスペクトは無視されているようです。私はAndroid:inputType="phone"Android:digits="0123456789-."と組み合わせて使用​​することも試みましたが、それでも複数の負の符号または小数点を許可します(inputType="number"はそのようなことについて本当に優れたエラーチェックを行っており、ユーザーも入力します)。 JavaコードでDigitsKeyListenerを使用しながら、XMLレイアウトファイルでAndroid:inputType="phone"を使用してみましたが、デフォルトの数値ソフトキーボード(上の行にのみ数字があるもの)(それはInputType.TYPE_CLASS_NUMBERを設定するように見えます。これにより、XMLレイアウトによって設定されたInputType.TYPE_CLASS_PHONEが無効になります).

ユーザーがアプリ外のグローバルオプションとしてIMEを選択する必要があるため、カスタムIMEを作成しても機能しません。

「電話」スタイルのソフトキーボードを使用する方法はありますか。また、入力内容に「番号」制限を使用する方法はありますか?

21
Adam Dunn

これまでのところ、DigitsKeyListenerを拡張し、getInputType()をオーバーライドして、InputType.TYPE_CLASS_PHONEを返すようにすることにしました。これにより、DigitsKeyListenerで便利なfilter()を使用できますが、同時にTYPE_CLASS_PHONEソフトキーボードを使用できます。私はAndroidプログラミングは初めてですが、これは何も壊さずに動作するようです。コードは次のようなものです:

import Android.text.method.DigitsKeyListener;
import Android.text.InputType;
public class CustomDigitsKeyListener extends DigitsKeyListener
{
    public CustomDigitsKeyListener() {
        super(false, false);
    }

    public CustomDigitsKeyListener(boolean sign, boolean decimal) {
        super(sign, decimal);
    }

    public int getInputType() {
        return InputType.TYPE_CLASS_PHONE;
    }
}

これを行う際に何か問題がありますか(getInputType()の戻りをスーパークラスが意図しないものに切り替える)?

9
Adam Dunn

私も同じ問題を抱えていました。これは私にとってはうまくいきます:

<item name="Android:inputType">numberDecimal</item>
<item name="Android:digits">0123456789.</item>

うまくいけば、これはあなたを助けます。

23
tjkn24

Adam Dunnコードは完璧に機能しますが、クラスを実装する方法を示しませんでした

import Android.text.method.DigitsKeyListener;
import Android.text.InputType;
public class CustomDigitsKeyListener extends DigitsKeyListener
{
    public CustomDigitsKeyListener() {
        super(false, false);
    }

    public CustomDigitsKeyListener(boolean sign, boolean decimal) {
        super(sign, decimal);
    }

    public int getInputType() {
        return InputType.TYPE_CLASS_PHONE;
    }
}

次に、このようにインスタンス化する必要があります

MyTextView.setKeyListener(new CustomDigitsKeyListener(true,true));
2
joe1327

電話のキーボードを使用して、自分で入力を確認します。入力が0〜9の有効な数字であるかどうかをテストすることは、それほど大きな条件ではありません。

1
anon

EditTextビューでAndroid:numeric="integer"を使用してみてください。

0
codinguser