AndroidのEditTextコントロールに入力マスクを指定する方法はありますか?
社会保障番号に###-##-####のようなものを指定できるようにしたい。これにより、無効な入力が自動的に拒否されます(たとえば、数字の代わりにアルファベット文字を入力します)。
OnKeyListenerを追加して、手動で有効性を確認できることに気付きました。しかし、これは面倒であり、さまざまなエッジケースを処理する必要があります。
バジー
AndroidのEditTextコントロールに入力マスクを指定する方法はありますか?
社会保障番号に###-##-####のようなものを指定できるようにしたい。これにより、無効な入力が自動的に拒否されます(たとえば、数字の代わりにアルファベット文字を入力します)。
OnKeyListenerを追加して、手動で有効性を確認できることに気付きました。しかし、これは面倒であり、さまざまなエッジケースを処理する必要があります。
バジー
InputFilter
ではなくを使用してみてくださいOnKeyListener
。これは、個々のキーの押下を追跡する必要がないことを意味します。また、で処理するのが面倒なフィールドへの貼り付けなども処理しますOnKeyListener
。
Androidに付属している実装のソースをInputFilter
見て、独自の実装を作成するための出発点を得ることができます。
Android StudioのAndroidプログラムでEditTextのマスクを使用する最も簡単な方法は、MaskedEditText
ライブラリ(GitHubリンク)を使用することです。これは一種のカスタムEditTextwithWatcherであり、さまざまな色(ユーザーがすでに入力を開始している場合でも利用できるようにしたい場合)、マスクを使用してヒントを設定でき、非常に使いやすいです:-)
compile 'ru.egslava:MaskedEditText:1.0.5'
<br.com.sapereaude.maskedEditText.MaskedEditText
android:id="@+id/phone_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="phone"
android:typeface="monospace"
mask:allowed_chars="1234567"
mask:mask="###-##-##"
app:keep_hint="true"
/>
そしてそれはです!
android.telephony.PhoneNumberFormattingTextWatcherクラスを見ることができます。###-###-####パターンで入力された電話番号のテキストをマスクします。
String phoneNumber = "1234567890";
String text = String.valueOf( android.telephony.PhoneNumberUtils.formatNumber(phoneNumber) ); //formatted: 123-456-7890
editTextMobile.setText(text); //set editText text equal to new formatted number
editTextMobile.setSelection(text.length()); //move cursor to end of editText view
onKey
フォーマットされた電話番号でおいしいオンザフライバニーセックスのための機能でこれを使用してください。
このサイトでは、マスキングに役立つ2つのクラスが用意されており、非常に便利です。
あなたはそれを改善するためにコメントの項目を使用する必要があります。ただし、多くのマスクのEditTextビューを簡単にマスクできるように、プログラムに追加する価値があります。
EditTextでこの効果を使用できます