EditText桁をプログラムで設定する


89

私は基本的に、プログラムでEditTextの数字値を設定しようとしています。これまでのところ:

weightInput.setInputType(InputType.TYPE_CLASS_PHONE);
weightInput.setKeyListener(DigitsKeyListener.getInstance());

これは問題ありませんが、小数点以下(。)も含めたいと思います。何か案は?


1
DialerKeyListener代わりに使用することをおDigitsKeyListener
勧め

回答:


208

これを試して:

<EditText
    android:inputType="number"
    android:digits="0123456789."
/>

コードから:

weightInput.setKeyListener(DigitsKeyListener.getInstance("0123456789."));

ただし、ユーザーは複数の「。」を含めることができます。実数については、JoeyRAの回答を参照してください。


それは問題ありませんが、プログラムでこれを実行したいと思います。この理由は、この数字が絶えず変化する唯一の変数であるため、1つのレイアウトを複数の状況で再利用したいためです。コードでそれを行うことは、私の状況でははるかに効果的です。
ryandlf 2011

2
ありがとう。私が求めたものに固有であるため、この回答はチェックマークに値すると実際に感じていますが、どちらの解決策も機能します。
ryandlf 2011

@feresr、それは奇妙TextViewです。ソースを見ると: // If no input type was specified, we will default to generic text, since we can't tell the IME about the set of digits that was selected.
Dmitry Gryazin 2017年

.9以降の用途は何ですか?
Mitesh Shah 2018

1
@MiteshShah小数点以下の桁数を許可します。
masterwok

30

これを試して:

weightInput.setInputType(InputType.TYPE_CLASS_NUMBER);          
weightInput.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);           
weightInput.setKeyListener(DigitsKeyListener.getInstance(false,true));

public static DigitsKeyListener getInstance (boolean sign, boolean decimal) 

0から9までの数字に加えて、マイナス記号(先頭のみ)および/または小数点(フィールドごとに1つのみ)を受け入れるDigitsKeyListenerを返します(指定されている場合)。

これにより、多くの「。」に関する問題が解決されます。EditTextで


1
説明を追加するだけです:editText.setKeyListener(DigitsKeyListener.getInstance(true、true)); 小数と負の数を有効にします。editText.setKeyListener(DigitsKeyListener.getInstance(false、true)); 正の10進数のみを有効にします。editText.setKeyListener(DigitsKeyListener.getInstance(false、false)); 正の整数のみを有効にします。
SerSánGal

8
質問:何setInputType度も何度も、2番目のものを最初のものに上書きしませんか?私はあなたが使うべきだと思うweightInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);が、私は100%わからない
ラファエル・ルイスムニョス

20

を使用しInputType.TYPE_NUMBER_FLAG_DECIMALます。

参照:入力タイプ


-1?私は確かにそれをしませんでした。あなたの解決策はうまくいきました、ありがとう。
ryandlf 2011

元に戻されたようです。喜んでお手伝いします。
リッキー

4

IPアドレス入力用(複数のドットと数字)

試してみてください

<EditText
    android:id="@+id/ipBox"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/ipAddrHint"
    android:inputType="numberDecimal|number"
    android:digits="0123456789."
    android:textSize="30sp" />

1
16進数のIPアドレス(0xで始まる部分)も有効であり、IPアドレスの代わりにドメイン名を使用できることに注意してください。
Triang3l 2013年

0

それでも適切な方法を見つけている人がいる場合は、setRawInputType()そうではないことに注意してくださいsetInputType()

val digits = "ABCDabcd" // or any characters you want to allow
editText.keyListener = DigitsKeyListener.getInstance(digits) 
editText.setRawInputType(InputType.TYPE_TEXT_VARIATION_PERSON_NAME)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.