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


144

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

回答:


340

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

3
はい!これが一番の答えです!コードはそうあるべきedittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});です。
アーサー

4
皆さん、正解でした。答えを更新しました。これを改善するのを助けてくれてありがとう!!
ErlVolton 2014年

4
xmlに設定したフィルタ(など)を上書きしないようにmaxLengthするにはInputFilter.AllCaps()editText.getFilters配列にtoを追加してみてください。stackoverflow.com/a/18934659/3890983を
tropicalfish

21
またはKotlinだけでeditText.filters = editText.filters + InputFilter.AllCaps()
Ilia Kurtov

4
さらに良い:editText.filters += InputFilter.AllCaps()コトリンは素晴らしい!<3
Milack27

123

EditTextでデフォルトでユーザー大文字での書き込みを強制したい場合は、を追加するだけです。(ユーザーは引き続き手動で小文字に変更できます。)android:inputType="textCapCharacters"


39
ユーザーが 'shift'を押して小文字を書くことを妨げるものはありません。
Fernando Leal 14

Fernandoに同意します。キーボードはデフォルトで大文字になっていますが、必須ではありません。
pforhan 2015

ユーザーは、シフトボタンを使用して、@ Fernando
Ajinkyaの

24

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


android:inputType = "textCapCharacters"
Parth Kapoor

18

双方向で使用できます。

最初の方法:

android:inputType="textCapSentences"EditTextに設定します。

二番目の方法:

ユーザーが番号を入力するときは、テキストウォッチャーを使用して、小文字を大文字に変更する必要があります。

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.length()); //fix reverse texting
      }
    }
});  

2
文字列が逆の順序で設定されるため、ソリューションは機能しません。
co2f2e 2013年

最初と2番目のどちらを使用したか。
Harshid 2013年

最初のものはまったく機能していません。2つ目はテキストを大文字にしますが、プログラムでカーソルを文の終わりに設定する必要があります。
co2f2e 2013年

@Kalanamith ya問題は何
ですか

6
最初のオプションtextCapSentencesが文を大文字にする場合、textCapCharactersが必要です。
Ghoti、2014年

13

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


@GustavoAlves、これを試したときに何が起こったのか教えていただけますか?私があなたの問題を調査できるかもしれません。:)
Abhishek 2016

こんにちは@Abhishek。プロパティを設定しても何も変わりませんでした。EditTextは引き続き大文字と小文字の両方を受け入れます。
Gus Costa

1
はい、EditTextを大文字のみを受け入れるように制限したい場合は、android:inputType = "textCapCharacters"が適切なオプションです。それを試してみて、私に知らせてください。☺️
アビシェーク

1
これが原因で、私が入力するたびに範囲外の例外が発生しました。
Zapnologica 2016年

2
android:textAllCaps="true"TextViewのプロパティのみです(stackoverflow.com/a/28803492/5268730)。android:inputType="textCapCharacters"代わりに使用してください。
woodii 2018

11

android:inputType="textCapCharacters"Edittextをxmlファイルに入れる必要があります。


9
青山七海もまったく同じ答えを書いた。より最近の質問に集中してください。これは2013年のものです。:)
ByteHamster '29

2
ユーザーが下の文字をシフトして入力することができていることに注意してください
Rafa0809

10

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

次のコードが役立つはずです。

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

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


9

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

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

できた!


2
あなたは、プロパティアクセスの構文を使用して、それを書くことができます: <your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
Makotosan

8
さらに良いこと:<your_edit_text>.filters += InputFilter.AllCaps()
マコトサン2017

9

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

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


8

入力フィルターを使用

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

6
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());
    }
});  

6

これを行うだけです:

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

5

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

プログラム的に:

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

XML:

android:inputType="textCapCharacters" with Edittext

4

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

3

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

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAllCaps="true"
    android:inputType="textCapCharacters"
/>

2
この解決策を試しましたか?これにより、ユーザーがeditextのコンテンツの編集を開始すると、アプリケーションがクラッシュします
surhidamatya

3

入力を大文字にするこのコードを試してください

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

2

受け入れられた回答に基づくと、この回答は同じですが、Kotlinで行われます。コピー貼り付けを簡単にするために:・)

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

1
filters += InputFilter.AllCaps():D
crgarridos

1

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

私はVisual Studio 2015 / Xamarinを使用して、Android 5.1とAndroid 6.0の両方にアプリをビルドしています(両方に同じAPKがインストールされています)。

android:inputType="textCapCharacters"axmlで指定すると、AllCapsキーボードはAndroid 6.0では期待どおりに表示されましたが、Android 5.1では表示されませんでした。android:textAllCaps="true"Android 5.1ではaxml に追加しましたが、AllCapsキーボードはまだありません。を使用してフィルターを設定しますEditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });しました。Android5.1ではソフトキーボードに小文字が表示されますが、入力フィールドはAllCapsになっています。

編集:私が観察し、OS関連であると想定した動作の違いは、実際にはテストデバイスでGoogleキーボードのバージョンが異なるためでした。 デバイスを最新のGoogleキーボード(この記事の執筆時点で2016年7月にリリース)に更新すると、「すべて大文字」の動作はOS間で一貫しました。現在、すべてのデバイスでキーボードに小文字が表示されていますが、入力が原因ですべて大文字になっていますSetFilters(new IInputFilter[] { new InputFilterAllCaps() });


1
こんにちはトニー、あなたは2つのアカウントを作成したようです。stackoverflow.com/users/6764633/tony-celiaおよびstackoverflow.com/users/6771440/deeveedee。それらをマージする場合は、stackoverflow.com/help/merging-accountsを参照してください。
Matt

ありがとう、マット。これを初心者の学習/間違いまでチョークで書いてください。あなたが指摘するまで、私が別のアカウントを作成したことを覚えていませんでした。幸い、アカウント統合機能はシンプルでした。すばらしいフォーラム!
Tony

1

ErlVoltonの答えに相当するXamarin:

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

これが、C#を非常に簡潔にする方法が好きな理由です。
Lionet Chen 2018

1

シンプルなコトリンの実現

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

私のPS filtersは常に最初は空です


0

提案されたソリューションのJava 1ライナーは次のようになります。

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

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


-1

単に、以下のコードをxmlファイルのEditTextに追加します。

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

大文字のテキストと数字の両方を許可する場合は、以下のコードを使用します。

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"

2
これは確かに機能しますが、ユーザーエクスペリエンスとしてはあまり良くありません。私はそれを試してみましたが、キーボードが(少なくともNで)自動大文字化しないので、小文字で入力された文字は無視され、ユーザーへのフィードバックがないため、UIが壊れているように見えます。
MattMatt 2017

@MattMattに完全に同意します。これを行うと、ユーザーは小文字の小文字を入力できなくなります。ユーザーは必要な大文字と小文字を入力でき、残りは単語を自動的に大文字にする必要があります
Mir Adnan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.