Androidアプリケーションには、ユーザーが情報を入力できる別のEditText
があります。しかし、ユーザーに大文字での書き込みを強制する必要があります。それを行う機能を知っていますか?
Androidには、実際には これだけの組み込みInputFilter !があります!
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
注意してください、setFilters
は、XML経由で設定された他のすべての属性をリセットします(つまり、maxLines
、inputType
、imeOptinos
...)。これを防ぐには、既存のフィルターにフィルターを追加します。
InputFilter[] editFilters = <EditText>.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = <YOUR_FILTER>;
<EditText>.setFilters(newFilters);
お望みならば ユーザーに書き込みを強制する 大文字デフォルト EditTextで、Android:inputType="textCapCharacters"
を追加するだけです。 (ユーザーは手動で小文字に変更できます。)
input type
をTYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS
に設定します。 keyboard
はそれを尊重する必要があります。
2つの方法を使用できます。
最初の方法:
EditTextでAndroid:inputType="textCapSentences"
を設定します。
2番目の方法:
ユーザーが数字を入力するときは、テキストウォッチャーを使用し、小文字を大文字に変更する必要があります。
edittext.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void afterTextChanged(Editable et) {
String s=et.toString();
if(!s.equals(s.toUpperCase()))
{
s=s.toUpperCase();
edittext.setText(s);
}
}
});
EditTextでAndroid:textAllCaps="true"
プロパティをxmlファイルに追加できます。これにより、ソフト入力キーボードがすべて大文字モードで表示されます。入力した値は大文字で表示されます。ただし、これは、ユーザーがUpperCase
文字でのみ入力できることを保証するものではありません。必要に応じて、小文字に戻すことができます。 Edittext
の出力がすべて大文字であることを確認する場合は、String
クラスのtoUpperCase()
メソッドを使用して入力文字列を手動で変換する必要があります。
キーボードの取り扱いを心配するのではなく、小文字または大文字の入力を受け入れて、文字列を大文字に変換してみませんか?
次のコードが役立ちます。
EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase
大文字の文字列が必要であることをユーザーが知る必要がないため、これはユーザーフレンドリーです。お役に立てれば。
Android:inputType="textCapCharacters"
をEdittextとともにxmlファイルに配置する必要があります。
入力フィルターを使用する
editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
これを行うだけです:
// ****** Every first letter capital in Word *********
<EditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:inputType="textCapWords"
/>
//***** if all letters are capital ************
Android:inputType="textCapCharacters"
さらに良い...1つのライナーin Kotlin ...
// gets your previous attributes in XML, plus adds AllCaps filter
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())
できた!
edittext.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void afterTextChanged(Editable et) {
String s=et.toString();
if(!s.equals(s.toUpperCase()))
{
s=s.toUpperCase();
edittext.setText(s);
}
editText.setSelection(editText.getText().length());
}
});
すべての資本を取得するには、XMLで次を使用します。
<EditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:textAllCaps="true"
Android:inputType="textCapCharacters"
/>
kotlinで、.ktファイルで変更を行います。
edit_text.filters = edit_text.filters + InputFilter.AllCaps()
Idを使用してウィジェットに直接アクセスするには、合成プロパティを使用します。また、XMLでは、編集テキストに次のようなフラグをいくつか追加します。
<EditText
Android:id="@+id/edit_text_qr_code"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
...other attributes...
Android:textAllCaps="true"
Android:inputType="textCapCharacters"
/>
これにより、大文字が有効になったときにキーボードが更新されます。
受け入れられた答えに基づいて、この答えは同じことをしますが、Kotlinで行います。コピー&ペーストを簡単にするために:・)
private fun EditText.autocapitalize() {
val allCapsFilter = InputFilter.AllCaps()
setFilters(getFilters() + allCapsFilter)
}
Visual Studio 2015/Xamarinを使用して、Android 5.1とAndroid 6.0の両方にアプリをビルドしています(両方に同じapkがインストールされています)。
AxmlでAndroid:inputType="textCapCharacters"
を指定すると、Android 6.0でAllCapsキーボードが期待どおりに表示されましたが、Android 5.1では表示されませんでした。 Android:textAllCaps="true"
をaxmlに追加しましたが、Android 5.1にはAllCapsキーボードはまだありません。 EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });
を使用してフィルターを設定し、ソフトキーボードがAndroid 5.1で小文字を表示している間、入力フィールドはAllCapsになりました。
編集:私が観察し、OS関連であると想定した動作の違いは、実際にはテストデバイスでGoogleキーボードの異なるバージョンがあったためです。 デバイスを最新のGoogleキーボード(この記事の執筆時点で2016年7月にリリース)に更新すると、「すべて大文字」の動作はOS間で一貫していました。現在、すべてのデバイスはキーボード上で小文字を表示しますが、入力はSetFilters(new IInputFilter[] { new InputFilterAllCaps() });
のためAll Capsです
大文字のキーボードをクリックしてedittextを取得するには、XMLでこのコードを使用します。
<EditText
Android:id="@+id/et"
Android:layout_width="250dp"
Android:layout_height="wrap_content"
Android:hint="Input your country"
Android:padding="10dp"
Android:inputType="textCapCharacters"
/>
以下のコードのいずれかを使用してみて、問題を解決できる場合があります。
プログラムで:
editText.filters = editText.filters + InputFilter.AllCaps()
XML
Android:inputType="textCapCharacters" with Edittext
ErlVoltonの答えに相当するXamarin:
editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
提案されたソリューションのJava 1ライナーは次のとおりです。
editText.setFilters(Lists.asList(new InputFilter.AllCaps(), editText.getFilters())
.toArray(new InputFilter[editText.getFilters().length + 1]));
com.google.common.collect.Lists
が必要であることに注意してください。
簡単なKotlinの実現
fun EditText.onlyUppercase() {
inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
filters = arrayOf(InputFilter.AllCaps())
}
PS for me filters
は最初は常に空です
私にとっては、Android:textAllCaps = "true"とAndroid:inputType = "textCapCharacters"を追加することで機能しました。
<Android.support.design.widget.TextInputEditText
Android:layout_width="fill_parent"
Android:layout_height="@dimen/edit_text_height"
Android:textAllCaps="true"
Android:inputType="textCapCharacters"
/>