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を作成しても機能しません。
「電話」スタイルのソフトキーボードを使用する方法はありますか。また、入力内容に「番号」制限を使用する方法はありますか?
これまでのところ、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()の戻りをスーパークラスが意図しないものに切り替える)?
私も同じ問題を抱えていました。これは私にとってはうまくいきます:
<item name="Android:inputType">numberDecimal</item>
<item name="Android:digits">0123456789.</item>
うまくいけば、これはあなたを助けます。
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));
電話のキーボードを使用して、自分で入力を確認します。入力が0〜9の有効な数字であるかどうかをテストすることは、それほど大きな条件ではありません。
EditTextビューでAndroid:numeric="integer"
を使用してみてください。