การใช้อักษรตัวพิมพ์ใหญ่ตัวแรกสำหรับ EditText


383

ฉันกำลังทำงานบนแอพรายการสิ่งที่ต้องทำส่วนบุคคลเล็กน้อยและทุกอย่างทำงานได้ค่อนข้างดี มีการเล่นโวหารเล็ก ๆ น้อย ๆ ที่ฉันอยากรู้ เมื่อใดก็ตามที่ฉันไปเพื่อเพิ่มรายการใหม่ฉันมีกล่องโต้ตอบที่มีมุมมอง EditText ที่แสดงอยู่ภายใน เมื่อฉันเลือกมุมมอง EditText คีย์บอร์ดจะปรากฏขึ้นเพื่อป้อนข้อความตามที่ควรจะเป็น ในแอปพลิเคชั่นส่วนใหญ่ค่าเริ่มต้นดูเหมือนว่าจะมีการกดแป้น Shift สำหรับตัวอักษรตัวแรก ... ต้องมีวิธีแก้ไขง่ายๆ แต่ฉันได้ทำการค้นหาข้อมูลอ้างอิงซ้ำ ๆ และไม่สามารถค้นหาได้ ฉันคิดว่าต้องมีแอตทริบิวต์ xml สำหรับการอ้างอิงที่โหลดโดยอแด็ปเตอร์ แต่ฉันไม่สามารถทราบได้ว่ามันคืออะไร

คำตอบ:


805

แบบคงที่ (เช่นในรูปแบบไฟล์ XML ของคุณ): ตั้งบนandroid:inputType="textCapSentences"EditText

โดยทางโปรแกรม: คุณต้องรวมInputType.TYPE_CLASS_TEXTไว้ในInputTypeของEditTextเช่น

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

สามารถใช้ร่วมกับข้อความและรูปแบบต่างๆเพื่อขอการใช้อักษรตัวพิมพ์ใหญ่แรกของทุกประโยค

- Google Docs


5
testEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); หรือ android: inputType = "textCapSentences" จะใช้งานได้เฉพาะเมื่อแป้นพิมพ์อุปกรณ์ของคุณเปิดใช้งานการตั้งค่าพิมพ์ใหญ่อัตโนมัติ
Lakshmanan

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

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

13
คำตอบนี้ไม่ได้ช่วยคำถามของ OP สิ่งนี้จะใช้อักษรตัวแรกเป็นตัวพิมพ์ใหญ่สำหรับแต่ละคำไม่ใช่ตัวอักษรตัวแรกของข้อความที่ป้อน (ซึ่งถือว่าเป็นประโยค) แม้ว่าสิ่งนี้อาจช่วยคนอื่นได้ แต่คำตอบที่ถูกต้องคือคำตอบที่ยอมรับได้
Andrew T.

37

ใช้บรรทัดต่อไปนี้ใน EditText ของคุณใน XML

android:inputType="textCapSentences|textMultiLine"

มันจะช่วยให้การสนับสนุนหลายสาย


2
นั่นควรเป็นคำตอบที่ได้รับการยอมรับเนื่องจากนี่เป็นทางออกเดียวที่จะไม่แก้ไข EditText เป็นบรรทัด
#:

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

หรือใช้งานได้android:inputType="textCapSentences"ก็ต่อเมื่อแป้นพิมพ์อุปกรณ์ของคุณเปิดใช้งานการตั้งค่าเป็นตัวพิมพ์ใหญ่อัตโนมัติ


ขอบคุณฉันติดขัดเพราะฉันเพิ่งปิดใช้งานแป้นพิมพ์ของอุปกรณ์การตั้งค่าตัวพิมพ์ใหญ่อัตโนมัติ
Pulkit

20

ฉันพบปัญหาเดียวกันเพียงแชร์สิ่งที่ฉันพบ อาจช่วยคุณและคนอื่น ๆ ...

ลองนี้บน layout.add EditTextของคุณบรรทัดด้านล่างของคุณ

android:inputType="textCapWords|textCapSentences"

ทำงานได้ดีกับฉัน .. หวังว่าจะได้ผลกับคุณ ...


5

ฉันสามารถรับประกันคุณทั้งสองคำตอบจะทำให้อักษรตัวแรกและจะไม่ทำให้บรรทัดเดียว edittext

หากคุณต้องการทำใน XMl ด้านล่างเป็นรหัส

android:inputType="textCapWords|textCapSentences"

หากต้องการทำในกิจกรรม / ส่วนย่อยด้านล่างคือรหัส

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

ป.ล. : ถ้าคุณมีทรัพย์สินอื่น ๆ ไม่เช่นกันคุณสามารถเพิ่มได้อย่างง่ายดายด้วยไพพ์ "|" สัญลักษณ์ตรวจสอบให้แน่ใจว่าไม่มีช่องว่างใน xml ระหว่างคุณสมบัติของแอตทริบิวต์


5

สำหรับการใช้อักษรตัวพิมพ์ใหญ่ใน EditText คุณสามารถเลือกประเภทอินพุตสองแบบด้านล่าง:

  1. หุ่นยนต์: inputType = "textCapSentences"
  2. หุ่นยนต์: inputType = "textCapWords"

textCapSentences
ซึ่งจะทำให้อักษรตัวแรกของคำแรกเป็นตัวพิมพ์ใหญ่ในทุกประโยค

textCapWords สิ่งนี้จะทำให้อักษรตัวแรกของทุกคำเป็นตัวพิมพ์ใหญ่

หากคุณต้องการคุณลักษณะทั้งสองเพียงใช้ | ลงชื่อด้วยคุณสมบัติทั้งสอง

android:inputType="textCapSentences|textCapWords"

3

ลองใช้รหัสนี้มันจะใช้อักษรตัวแรกของทุกคำ

- ตั้งค่า addTextChangedListener สำหรับมุมมอง EditText

edt_text.addTextChangedListener (พิทักษ์);

- เพิ่ม 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

หุ่นยนต์: inputType = "textMultiLine | textCapSentences"

นอกจากนี้ยังจะช่วยให้หลายบรรทัดและในไฟล์ JAVA

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

ตรวจสอบให้แน่ใจว่าการตั้งค่าการใช้อักษรตัวพิมพ์ใหญ่อัตโนมัติของแป้นพิมพ์ของคุณเปิดใช้งานอยู่


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

ฉันก่อตั้งและโซลูชันของฉัน: คุณมี 2 วิธีในการแก้ไขใน java:

 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.