web-dev-qa-db-ja.com

Android EditTextで、大文字を強制的に書き込む方法

Androidアプリケーションには、ユーザーが情報を入力できる別のEditTextがあります。しかし、ユーザーに大文字での書き込みを強制する必要があります。それを行う機能を知っていますか?

116
Natacha

Androidには、実際には これだけの組み込みInputFilter !があります!

edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

注意してください、setFiltersは、XML経由で設定された他のすべての属性をリセットします(つまり、maxLinesinputTypeimeOptinos...)。これを防ぐには、既存のフィルターにフィルターを追加します。

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);
308
ErlVolton

お望みならば ユーザーに書き込みを強制する 大文字デフォルト EditTextで、Android:inputType="textCapCharacters"を追加するだけです。 (ユーザーは手動で小文字に変更できます。)

108
Aoyama Nanami

input typeTYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERSに設定します。 keyboardはそれを尊重する必要があります。

20
Gabe Sechan

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);
      }
    }
});  
15
Harshid

EditTextでAndroid:textAllCaps="true"プロパティをxmlファイルに追加できます。これにより、ソフト入力キーボードがすべて大文字モードで表示されます。入力した値は大文字で表示されます。ただし、これは、ユーザーがUpperCase文字でのみ入力できることを保証するものではありません。必要に応じて、小文字に戻すことができます。 Edittextの出力がすべて大文字であることを確認する場合は、StringクラスのtoUpperCase()メソッドを使用して入力文字列を手動で変換する必要があります。

12
Abhishek

キーボードの取り扱いを心配するのではなく、小文字または大文字の入力を受け入れて、文字列を大文字に変換してみませんか?

次のコードが役立ちます。

EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase

大文字の文字列が必要であることをユーザーが知る必要がないため、これはユーザーフレンドリーです。お役に立てれば。

10
anthonycr

Android:inputType="textCapCharacters"をEdittextとともにxmlファイルに配置する必要があります。

10
Pabel

入力フィルターを使用する

editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
8
Sreejesh K Nair

これを行うだけです:

// ****** 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"
6
Pravin Suthar

さらに良い...1つのライナーin Kotlin ...

// gets your previous attributes in XML, plus adds AllCaps filter    
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())

できた!

5
S Pimenta
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());
    }
});  
5

すべての資本を取得するには、XMLで次を使用します。

<EditText
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:textAllCaps="true"
    Android:inputType="textCapCharacters"
/>
4
akshay shetty

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"
    />

これにより、大文字が有効になったときにキーボードが更新されます。

2
vishnu benny

受け入れられた答えに基づいて、この答えは同じことをしますが、Kotlinで行います。コピー&ペーストを簡単にするために:・)

private fun EditText.autocapitalize() {
    val allCapsFilter = InputFilter.AllCaps()
    setFilters(getFilters() + allCapsFilter)
}
1
Roc Boronat

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です

1
Tony

大文字のキーボードをクリックして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"
    />
1
Ashana.Jackol

以下のコードのいずれかを使用してみて、問題を解決できる場合があります。

プログラムで:

editText.filters = editText.filters + InputFilter.AllCaps()

XML

Android:inputType="textCapCharacters" with Edittext
1
Nivedh

ErlVoltonの答えに相当するXamarin:

editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
1
stovroz

提案されたソリューションのJava 1ライナーは次のとおりです。

editText.setFilters(Lists.asList(new InputFilter.AllCaps(), editText.getFilters())
    .toArray(new InputFilter[editText.getFilters().length + 1]));

com.google.common.collect.Listsが必要であることに注意してください。

0
boriguen

簡単なKotlinの実現

fun EditText.onlyUppercase() {
    inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
    filters = arrayOf(InputFilter.AllCaps())
}

PS for me filtersは最初は常に空です

0
V. Kalyuzhnyu

私にとっては、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"
                    />
0