Kapitalisasi huruf pertama untuk EditText

383

Saya sedang mengerjakan aplikasi daftar todo pribadi kecil dan sejauh ini semuanya telah bekerja dengan baik. Ada satu kekhasan kecil yang ingin saya cari tahu. Setiap kali saya pergi untuk menambahkan item baru, saya memiliki Dialog dengan tampilan EditText di dalamnya. Ketika saya memilih tampilan EditText, keyboard muncul untuk memasukkan teks, sebagaimana mestinya. Pada sebagian besar aplikasi, tampaknya default adalah bahwa tombol shift ditahan untuk huruf pertama ... meskipun tidak melakukan ini untuk pandangan saya. Harus ada cara sederhana untuk memperbaikinya, tetapi saya telah mencari referensi berulang kali dan tidak dapat menemukannya. Saya berpikir harus ada atribut xml untuk referensi yang dimuat oleh Adaptor, tetapi saya tidak dapat menemukan apa itu.

Maximus
sumber

Jawaban:

805

Secara statis (mis. Di file XML tata letak Anda): atur android:inputType="textCapSentences"di EditText.

Secara terprogram: Anda harus memasukkan InputType.TYPE_CLASS_TEXTdi InputTypedalam EditText, misalnya

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

Dapat dikombinasikan dengan teks dan variasinya untuk meminta kapitalisasi huruf pertama dari setiap kalimat.

- Google Documents

McStretch
sumber
5
testEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); atau android: inputType = "textCapSentences" hanya akan berfungsi jika keyboard perangkat Anda Pengaturan Kapitalisasi Otomatis diaktifkan.
Lakshmanan
8
Mengapa mengaktifkan ini menyebabkan saya android:lines="7"tidak lagi menampilkan 7 baris (sekarang default kembali ke 1 baris)
James Wierzba
3
estEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); atau android: inputType = "textCapSentences" hanya akan berfungsi jika keyboard perangkat Anda Pengaturan Kapitalisasi Otomatis diaktifkan. Apa alternatif untuk ini, secara terprogram?
Swift
@ JamesWierzba saya akan merujuk di sini jawaban Shivang sebagai tanggapan untuk dukungan multi-line. Tambahkan android: inputType = "textCapSentences | textMultiLine"
Lenin
76

Cukup gunakan android:inputType="textCapWords"di elemen EditText Anda.

Sebagai contoh:

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

Lihat tautan berikut untuk referensi: http://developer.android.com/reference/android/widget/TextView.html#attr_android%3ainputType

Mangi Morobe
sumber
Ini adalah praktik yang baik untuk menandai kode dalam elemen kode alih-alih membuatnya tebal.
Ravi Bhatt
13
Jawaban ini tidak terlalu membantu pertanyaan OP. Ini akan menggunakan huruf besar karakter pertama untuk setiap kata , bukan karakter pertama dari teks input (yang dianggap sebagai kalimat). Meskipun ini mungkin dapat membantu yang lain, jawaban yang benar adalah jawaban yang diterima.
Andrew T.
37

Terapkan baris berikut di EditText Anda dalam XML.

android:inputType="textCapSentences|textMultiLine"

Ini juga akan memungkinkan dukungan multi-line.

Shivang
sumber
2
Itu harus menjadi jawaban yang diterima, karena ini adalah satu-satunya solusi yang tidak akan menciutkan EditText menjadi satu-baris
egorikem
31
testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);   

atau android:inputType="textCapSentences"hanya akan berfungsi jika keyboard perangkat Anda Pengaturan Capititalisasi Otomatis diaktifkan.

Lakshmanan
sumber
Terima kasih, saya macet karena saya baru saja menonaktifkan keyboard perangkat Auto Capitalize Setting
Pulkit
20

Saya mengalami masalah yang sama, hanya membagikan apa yang saya temukan. Mungkin bisa membantu Anda dan orang lain ...

Coba ini di tata letak Anda. Tambahkan baris di bawah ini di EditText.

android:inputType="textCapWords|textCapSentences"

berfungsi dengan baik pada saya .. semoga berhasil juga pada Anda ...

pengguna4144348
sumber
5

Saya dapat meyakinkan Anda berdua jawaban akan membuat huruf kapital pertama dan tidak akan membuat satu baris edittext.

Jika Anda ingin melakukannya di XMl di bawah ini adalah kode

android:inputType="textCapWords|textCapSentences"

Jika ingin melakukannya dalam aktivitas / fragmen dll di bawah ini adalah kode

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

PS: Jika Anda tidak memiliki properti lain juga, Anda dapat dengan mudah menambahkannya dengan pipa "|" simbol, pastikan saja tidak ada ruang di xml antara properti atribut

Tushar Srivastava
sumber
5

Untuk Kapitalisasi pada EditText Anda dapat memilih dua jenis input di bawah ini:

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

textCapSentences
Ini akan membiarkan huruf pertama dari kata pertama sebagai Modal dalam setiap kalimat.

textCapWords Ini akan membiarkan huruf pertama dari setiap kata sebagai Capital.

Jika Anda ingin kedua atribut gunakan saja | masuk dengan kedua atribut

android:inputType="textCapSentences|textCapWords"
anand tripathi
sumber
3

Coba Kode Ini, ini akan menggunakan huruf besar karakter pertama dari semua kata.

- atur addTextChangedListener untuk tampilan EditText

edt_text.addTextChangedListener (watcher);

- Tambahkan 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);
        }
    }
};
Dharmesh Patel
sumber
3

Untuk menggunakan huruf besar, Anda dapat melakukan hal berikut dengan mengedit teks:

Untuk membuat huruf kapital pertama dari setiap kata :

android:inputType="textCapWords"

Untuk membuat huruf kapital pertama dari setiap kalimat :

android:inputType="textCapSentences"

Untuk membuat setiap huruf kapital:

android:inputType="textCapCharacters"

Tetapi ini hanya akan membuat perubahan pada keyboard dan pengguna dapat mengubah mode untuk menulis huruf dalam huruf kecil.

Jadi pendekatan ini tidak terlalu dihargai jika Anda benar-benar ingin data dalam format kapital, tambahkan kelas berikut terlebih dahulu:

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

Lalu,

Sekarang, gunakan huruf besar untuk setiap kata:

CapitalizeFirstLetter.capitaliseName(name);

Untuk menggunakan huruf kapital hanya kata pertama:

CapitalizeFirstLetter.capitaliseOnlyFirstLetter(data);
Suraj Vaishnav
sumber
2

Tetapkan tipe input dalam XML dan juga dalam file JAVA seperti ini,

Dalam XML,

android: inputType = "textMultiLine | textCapSentences"

Ini juga akan memungkinkan multiline dan dalam file JAVA,

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

pastikan pengaturan Kapitalisasi Otomatis keyboard Anda Diaktifkan .

Siddharth Sheth
sumber
2

Dalam file XML layout Anda:

  • set android:inputType="textCapSentences"

  • Pada Anda EditTextuntuk memiliki alfabet pertama dari kata pertama dari setiap kalimat sebagai modal

  • Atau android:inputType="textCapWords"pada EditText Anda untuk memiliki alfabet pertama dari setiap kata sebagai modal

Himmat Gill
sumber
1

gunakan kode ini hanya huruf kapital huruf pertama untuk 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) {

            }
        });
milan pithadia
sumber
0

Sebelumnya dulu android:capitalize="words", yang sekarang sudah usang. Alternatif yang direkomendasikan adalah menggunakanandroid:inputType="textCapWords"

Harap dicatat bahwa ini hanya akan berfungsi jika keyboard Perangkat Anda Pengaturan Capititalisasi Otomatis diaktifkan.

Untuk melakukan ini secara terprogram, gunakan metode berikut:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);

Mahendra Liya
sumber
0

saya mendirikan dan solusi saya: Anda memiliki 2 cara untuk menyelesaikannya di java:

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

dan xml:

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

sumber
0

Secara terprogram

TextView firstline = (TextView) findViewById(R.id.firstline);
firstline.setAllCaps(true);
Rajesh Tiwari
sumber
0

jika Anda menulis gaya di styles.xml lalu

hapus android: properti inputType dan tambahkan baris di bawah ini

<item name="android:capitalize">words</item>
Sai Gopi N
sumber