25

私は次のように作成したeditTextsの配列を持っています:

        inputs[i] = new EditText(this);
        inputs[i].setWidth(376);
        inputs[i].setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
        tFields.addView(inputs[i]);

すべての文字を大文字にしてほしい。現在、最初の単語の最初の文字は小文字で、その後のすべての文字は大文字です。ユーザーが入力した内容を大文字に変換することはできますが、それは実際には私が望んでいることではありません。これらのフィールドを希望どおりに動作させる方法はありますか?

4

11 に答える 11

24

「クラス」のテキストからもそれを伝える必要があります。

inputs[i] = new EditText(this);
inputs[i].setWidth(376);
inputs[i].setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
tFields.addView(inputs[i]);

入力タイプビットマスクです。|を置くことでフラグを組み合わせることができます 真ん中の(パイプ)文字。ORロジック関数を表します。このようなビットマスクで使用すると、「このフラグと他のフラグ」を意味します。

(この回答はロビンの回答と同じですが、コードに入れることができる最悪のものの1つである「マジックナンバー」がありません。AndroidAPIには定数があり、値をコピーして最終的にコードを壊すリスクを冒す代わりに定数を使用します。)

于 2013-09-19T15:01:35.667 に答える
18

これにより、書き込み時にすべての文字が大文字になります。

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

ここに元の答え。

于 2016-03-16T14:32:34.540 に答える
12

私はこの質問が少し古いことを知っていますが、ここではさまざまな方法でそれを行う方法を説明します:

XMLで大文字を適用する

EditTextXMLに以下を追加します。

android:inputType="textCapCharacters"

JavaのEditTextへの唯一のフィルターとしてUpperCaseを適用する

ここでは、EditTextの唯一のフィルターとしてUpperCaseフィルターを設定しています。このメソッドは、以前に追加されたすべてのフィルターを削除することに注意してください。

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

JavaのEditTextの既存のフィルターに大文字を追加する

EditTextのすでに適用されているフィルター(たとえば、inputType、maxLengthなど)を保持するには、適用されたフィルターを取得し、それらのフィルターに大文字のフィルターを追加して、EditTextに戻す必要があります。方法の例を次に示します。

InputFilter[] editFilters = editText.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = new InputFilter.AllCaps();  
editText.setFilters(newFilters);
于 2017-09-28T15:11:44.600 に答える
6

String.toUpperCase()メソッドを使用するだけです。

例 :

String str = "blablabla";
editText.setText(str.toUpperCase()); // it will give : BLABLABLA

編集 :

この属性をxmlEditTextのタグに追加します:layout

 android:textAllCaps="true"

また:

ユーザーが入力したものをすべて大文字にしたい場合は、を実装し、TextWatcherそれを使用しEditText addTextChangedListenerて追加できonTextChangeます。メソッドのonは、ユーザー入力を受け取り、大文字の同じテキストに置き換えます。

editText.addTextChangedListener(upperCaseTextWatcher);

final TextWatcher upperCaseTextWatcher = new TextWatcher() {

public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}

public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    editText.setText(editText.getText().toString().toUpperCase());
    editText.setSelection(editText.getText().toString().length());
}

public void afterTextChanged(Editable editable) {
}

};
于 2012-12-04T15:16:03.043 に答える
6

あなたはこれを試すことができます:

android:inputType="textCapCharacters"

それは私のために働いた。=)

于 2016-10-25T11:35:11.320 に答える
3

各文の最初の単語を大文字にするには、次を使用します。

android:inputType="textCapSentences"

すべての単語の最初の文字を大文字にするには:

android:inputType="textCapWords"

すべてのキャラクターの使用を大文字にするには:

android:inputType="textCapCharacters"

于 2019-03-13T08:10:51.713 に答える
2

今日の時点で、その

android:inputType="textCapCharacters"

于 2018-09-12T19:12:18.900 に答える
1

EditTextビューに正しい入力タイプを設定するだけです。

editText.inputType == InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS

別の方法として、InputFilterを使用できます。ここで、Kotlin拡張機能を作成しました:

fun EditText.allCaps() {
    val newFilters = this.filters.copyOf(this.filters.size + 1)

    newFilters[newFilters.size - 1] = InputFilter.AllCaps()

    this.filters = newFilters
}

私はこの両方の方法を使用することを好みます。InputFilterはハードウェアキーボードでも機能しますが、InputTypeはソフトキーボードでのみ有効であることに注意してください。

于 2021-01-25T12:24:21.980 に答える
0

これはうまくいくでしょう

    inputs[i] = new EditText(this);
    inputs[i].setWidth(376);
    inputs[i].setInputType(0x00001001);
    tFields.addView(inputs[i]);

0x00001001は「textCapCharacters定数」に対応します。

于 2012-12-04T15:25:10.573 に答える
0

xmlで次の1行のコードを使用してみてください。

android:capitalize="sentences"
于 2014-03-18T06:26:07.683 に答える
0

何らかの理由で、xmlの追加が私のデバイスで機能しませんでした。

私は、テキストフィルターがこのように大文字で機能することを発見しました

    EditText editText = (EditText) findViewById(R.id.editTextId);

    InputFilter toUpperCaseFilter = new InputFilter() {
        public CharSequence filter(CharSequence source, int start, int end,
                                   Spanned dest, int dstart, int dend) {

            StringBuilder stringBuilder = new StringBuilder();

            for (int i = start; i < end; i++) {
                Character character = source.charAt(i);
                character = Character.toUpperCase(character); // THIS IS UPPER CASING
                stringBuilder.append(character);

            }
            return stringBuilder.toString();
        }

    };

    editText.setFilters(new InputFilter[] { toUpperCaseFilter });
于 2017-06-07T16:32:02.680 に答える