EditTextの最初の文字の大文字


383

私は小さな個人的なToDoリストアプリに取り組んでおり、これまでのところすべてが非常にうまく機能しています。私が理解したい小さな癖があります。新しいアイテムを追加するときはいつでも、内部にEditTextビューが表示されたダイアログがあります。EditTextビューを選択すると、キーボードがテキストを入力するために表示されます。ほとんどのアプリケーションでは、デフォルトでは、Shiftキーが最初の文字に対して保持されているようです...私の見解ではこれは行いません。修正するための簡単な方法が必要ですが、参照を繰り返し検索しましたが、見つかりません。アダプタによって読み込まれた参照のxml属性が必要だと思いますが、それが何であるかわかりません。

回答:


805

静的に(つまり、レイアウトXMLファイルで):に設定android:inputType="textCapSentences"しますEditText

プログラム:あなたは含める必要がありInputType.TYPE_CLASS_TEXTInputTypeEditText、例えば

EditText editor = new EditText(this); 
editor.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

テキストとそのバリエーションを組み合わせて、すべての文の最初の文字の大文字化を要求できます。

- Googleドキュメント


5
testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); またはandroid:inputType = "textCapSentences"は、デバイスのキーボードの自動大文字化設定が有効になっている場合にのみ機能します。
ラクシュマナン2014年

8
これを有効にするとなぜandroid:lines="7"7行が表示されなくなるのですか(デフォルトでは1行に戻ります)
James Wierzba

3
estEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); またはandroid:inputType = "textCapSentences"は、デバイスのキーボードの自動大文字化設定が有効になっている場合にのみ機能します。このための代替策は何ですか?
Swift

@JamesWierzba複数行サポートの応答として、ここでShivangの回答を参照します。android:inputType = "textCapSentences | textMultiLine"を追加します
レーニン

76

android:inputType="textCapWords"EditText要素で使用するだけです。

例えば:

<EditText
    android:id="@+id/txtName"
    android:layout_width="0dp"
    android:layout_height="40dp"
    android:layout_weight="0.7"
    android:inputType="textCapWords"
    android:textColorHint="#aaa"
    android:hint="Name Surname"
    android:textSize="12sp" />

参照については、次のリンクを参照してください:http : //developer.android.com/reference/android/widget/TextView.html#attr_android%3ainputType


コード要素でコードをマークする代わりに、太字にすることをお勧めします。
Ravi Bhatt 2013年

13
この回答は、OPの質問には実際には役立ちません。これは、それぞれのための最初の文字大文字であろう単語ではなく、(文とする)入力テキストの最初の文字。これはおそらく他の人を助けるかもしれませんが、正しい答えは受け入れられた答えです。
アンドリューT.

37

XMLのEditTextに次の行を適用します。

android:inputType="textCapSentences|textMultiLine"

また、複数行のサポートも可能になります。


2
これは、シングルラインにのEditTextが崩壊しないだろう唯一のソリューションであるとしてそれは、受け入れ答えなければなりません
egorikem

31
testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);   

またはandroid:inputType="textCapSentences"、デバイスのキーボードの自動大文字設定が有効になっている場合にのみ機能します。


おかげで、デバイスキーボードのAuto Capitalize設定を無効にしただけで行き詰まりました
Pulkit

20

私は同じ問題に遭遇し、発見したことを共有しました。あなたや他の人を助けるかもしれません...

これをあなたのレイアウトで試してくださいEditText

android:inputType="textCapWords|textCapSentences"

私でも問題なく動作します。


5

どちらの回答でも最初の文字が大文字になり、edittextが1行にならないことを確認できます。

あなたがXMlでそれをしたいのであれば、以下のコードです

android:inputType="textCapWords|textCapSentences"

以下のアクティビティ/フラグメントなどでそれを実行したい場合はコードです

momentTextView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS | InputType.TYPE_TEXT_FLAG_MULTI_LINE)

PS:他のプロパティがない場合は、パイプ「|」で簡単に追加できます。シンボル、xmlの属性プロパティの間にスペースがないことを確認してください


5

EditTextの大文字化では、以下の2つの入力タイプを選択できます。

  1. android:inputType = "textCapSentences"
  2. android:inputType = "textCapWords"

textCapSentences
これにより、すべての文で最初の単語の最初の文字が大文字になります。

textCapWords これにより、すべての単語の最初の文字が大文字になります。

両方の属性が必要な場合は、| 両方の属性で署名する

android:inputType="textCapSentences|textCapWords"

3

このコードを試してください。すべての単語の最初の文字が大文字になります。

-EditTextビューにaddTextChangedListenerを設定します

edt_text.addTextChangedListener(watcher);

-TextWatcherを追加

TextWatcher watcher = new TextWatcher() {
    int mStart = 0;

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        mStart = start + count;
    }

    @Override
    public void afterTextChanged(Editable s) {
        String input = s.toString();
        String capitalizedText;
        if (input.length() < 1)
            capitalizedText = input;
        else if (input.length() > 1 && input.contains(" ")) {
            String fstr = input.substring(0, input.lastIndexOf(" ") + 1);
            if (fstr.length() == input.length()) {
                capitalizedText = fstr;
            } else {
                String sstr = input.substring(input.lastIndexOf(" ") + 1);
                sstr = sstr.substring(0, 1).toUpperCase() + sstr.substring(1);
                capitalizedText = fstr + sstr;
            }
        } else
            capitalizedText = input.substring(0, 1).toUpperCase() + input.substring(1);

        if (!capitalizedText.equals(edt_text.getText().toString())) {
            edt_text.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                }

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {

                }

                @Override
                public void afterTextChanged(Editable s) {
                    edt_text.setSelection(mStart);
                    edt_text.removeTextChangedListener(this);
                }
            });
            edt_text.setText(capitalizedText);
        }
    }
};

3

大文字にするには、エディットテキストで次の操作を実行できます。

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

android:inputType="textCapWords"

すべての文の最初の文字を大文字にするに

android:inputType="textCapSentences"

ようにするには、すべての文字の資本:

android:inputType="textCapCharacters"

しかし、これはキーボードに変更を加えるだけであり、ユーザーは小文字で文字を書き込むようにモードを変更できます。

したがって、データを大文字の形式で本当に必要な場合は、このアプローチはあまり評価されません。最初に次のクラスを追加します。

public class CapitalizeFirstLetter {
    public static String capitaliseName(String name) {
        String collect[] = name.split(" ");
        String returnName = "";
        for (int i = 0; i < collect.length; i++) {
            collect[i] = collect[i].trim().toLowerCase();
            if (collect[i].isEmpty() == false) {
                returnName = returnName + collect[i].substring(0, 1).toUpperCase() + collect[i].substring(1) + " ";
            }
        }
        return returnName.trim();
    }
    public static String capitaliseOnlyFirstLetter(String data)
    {
        return data.substring(0,1).toUpperCase()+data.substring(1);
    }
}

その後、

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

CapitalizeFirstLetter.capitaliseName(name);

最初の単語だけを大文字にするには:

CapitalizeFirstLetter.capitaliseOnlyFirstLetter(data);

2

次のように、XMLとJAVAファイルで入力タイプを設定します。

XMLでは、

android:inputType = "textMultiLine | textCapSentences"

また、複数行およびJAVAファイルで、

edittext.setRawInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

キーボードのAuto-Capitalization設定がEnabledであることを確認してください。


2

レイアウトXMLファイルで:

  • セットする android:inputType="textCapSentences"

  • あなたの上のEditText首都として、各文の最初の単語の最初のアルファベットを持っています

  • またはandroid:inputType="textCapWords"、EditTextで各単語の最初のアルファベットを大文字として使用する


1

このコードを使用して、EditTextの最初の文字の大文字のみを使用します

MainActivity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:tag="true">
    </EditText>

</RelativeLayout>

MainActivity.java

EditText et = findViewById(R.id.et);
        et.addTextChangedListener(new TextWatcher() {
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2)
            {
                if (et.getText().toString().length() == 1 && et.getTag().toString().equals("true"))
                {
                    et.setTag("false");
                    et.setText(et.getText().toString().toUpperCase());
                    et.setSelection(et.getText().toString().length());
                }
                if(et.getText().toString().length() == 0)
                {
                    et.setTag("true");
                }
            }

            public void afterTextChanged(Editable editable) {

            }
        });

0

以前android:capitalize="words"はでしたが、現在は非推奨です。推奨される代替手段は、android:inputType="textCapWords"

これは、デバイスのキーボードの自動大文字設定が有効になっている場合にのみ機能することに注意してください。

これをプログラムで行うには、次の方法を使用します。

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);


0

私が設立し、私の解決策:あなたはJavaでそれを解決する2つの方法があります:

 testEditText.setInputType(InputType.TYPE_CLASS_TEXT 
 | InputType.TYPE_TEXT_FLAG_CAP_WORDS);   

とxml:

 <EditText
android:id="@+id/mytxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords"
android:textSize="12sp" />


0

styles.xmlでスタイルを記述している場合

android:inputTypeプロパティを削除し、以下の行を追加します

<item name="android:capitalize">words</item>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.