Viết hoa chữ cái đầu tiên cho EditText


383

Tôi đang làm việc trên một ứng dụng danh sách việc cần làm cá nhân nhỏ và cho đến nay mọi thứ đã hoạt động khá tốt. Có một điều khó hiểu tôi muốn tìm ra. Bất cứ khi nào tôi đi để thêm một mục mới, tôi có Hộp thoại với chế độ xem Chỉnh sửa hiển thị bên trong. Khi tôi chọn chế độ xem Chỉnh sửa, bàn phím sẽ xuất hiện để nhập văn bản. Trong hầu hết các ứng dụng, mặc định dường như là phím shift được giữ cho chữ cái đầu tiên ... mặc dù nó không làm điều này theo quan điểm của tôi. Có một cách đơn giản để khắc phục, nhưng tôi đã tìm kiếm tài liệu tham khảo nhiều lần và không thể tìm thấy nó. Tôi nghĩ rằng phải có một thuộc tính xml cho tham chiếu được tải bởi Bộ điều hợp, nhưng tôi không thể tìm ra nó là gì.

Câu trả lời:


805

Tĩnh (tức là trong tệp XML bố trí của bạn): được đặt android:inputType="textCapSentences"trên của bạn EditText.

Lập trình: bạn phải bao gồm InputType.TYPE_CLASS_TEXTtrong InputTypecủa EditText, ví dụ:

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

Có thể được kết hợp với văn bản và các biến thể của nó để yêu cầu viết hoa ký tự đầu tiên của mỗi câu.

- Google Docs


5
testEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); hoặc android: inputType = "textCapSentences" sẽ chỉ hoạt động nếu bàn phím thiết bị của bạn tự động Cài đặt viết hoa.
Lakshmanan

8
Tại sao việc bật này khiến tôi android:lines="7"không còn hiển thị 7 dòng nữa (hiện tại nó mặc định trở lại 1 dòng)
James Wierzba

3
estEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); hoặc android: inputType = "textCapSentences" sẽ chỉ hoạt động nếu bàn phím thiết bị của bạn tự động Cài đặt viết hoa. Sự thay thế cho điều này, theo chương trình là gì?
Swift

@JamesWierzba Tôi sẽ giới thiệu ở đây câu trả lời của Shivang là phản hồi cho hỗ trợ đa dòng. Thêm android: inputType = "textCapSentences | textMultiLine"
Lenin

76

Chỉ cần sử dụng android:inputType="textCapWords"trong phần tử EditText của bạn.

Ví dụ:

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

Tham khảo liên kết sau để tham khảo: http://developer.android.com/reference/android/widget/TextView.html#attr_android%3ainputType


Đó là một thực hành tốt để đánh dấu mã trong phần tử mã thay vì làm cho nó đậm.
Ravi Bhatt

13
Câu trả lời này không thực sự giúp ích cho câu hỏi của OP. Điều này sẽ viết hoa ký tự đầu tiên cho mỗi từ , không phải ký tự đầu tiên của văn bản đầu vào (được giả sử là một câu). Trong khi điều này có thể giúp những người khác, câu trả lời đúng là câu trả lời được chấp nhận.
Andrew T.

37

Áp dụng dòng sau trong EditText của bạn trong XML.

android:inputType="textCapSentences|textMultiLine"

Nó cũng sẽ cho phép hỗ trợ nhiều dòng.


2
Đó phải là một câu trả lời được chấp nhận, vì đây là giải pháp duy nhất sẽ không thu gọn EditText thành một dòng
egorikem

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

hoặc android:inputType="textCapSentences"sẽ chỉ hoạt động Nếu bàn phím thiết bị của bạn tự động Cài đặt viết hoa.


Cảm ơn, tôi đã bị kẹt vì tôi vừa tắt bàn phím thiết bị Tự động viết hoa
Pulkit

20

Tôi gặp phải vấn đề tương tự, chỉ chia sẻ những gì tôi tìm ra. Có thể giúp bạn và những người khác ...

Hãy thử điều này trên layout của bạn. Thêm dòng dưới đây trong của bạn EditText.

android:inputType="textCapWords|textCapSentences"

hoạt động tốt với tôi .. hy vọng nó cũng hoạt động với bạn ...


5

Tôi có thể đảm bảo với bạn cả hai câu trả lời sẽ tạo chữ cái đầu tiên và sẽ không tạo dòng đơn edittext.

Nếu bạn muốn làm điều đó trong XMl dưới đây là mã

android:inputType="textCapWords|textCapSentences"

Nếu muốn làm điều đó trong hoạt động / đoạn vv bên dưới là mã

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

PS: Nếu bạn đang có tài sản khác này, bạn cũng có thể dễ dàng thêm nó bằng một đường ống "|" biểu tượng, chỉ cần đảm bảo không có khoảng trắng trong xml giữa các thuộc tính thuộc tính


5

Để viết hoa trong EditText, bạn có thể chọn hai loại đầu vào bên dưới:

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

textCapSentences
Điều này sẽ cho phép chữ cái đầu tiên của từ đầu tiên là Capital trong mỗi câu.

textCapemme Điều này sẽ cho phép chữ cái đầu tiên của mỗi từ là Capital.

Nếu bạn muốn cả hai thuộc tính chỉ cần sử dụng | ký với cả hai thuộc tính

android:inputType="textCapSentences|textCapWords"

3

Hãy thử Mã này, nó sẽ viết hoa ký tự đầu tiên của tất cả các từ.

- đặt addTextChangedListener cho chế độ xem Chỉnh sửa

edt bản.addTextChangedListener (người theo dõi);

- Thêm 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

Để viết hoa, bạn có thể thực hiện các thao tác sau với chỉnh sửa văn bản:

Để tạo vốn chữ cái đầu tiên của mỗi từ :

android:inputType="textCapWords"

Để viết hoa chữ cái đầu tiên của mỗi câu :

android:inputType="textCapSentences"

Để làm cho mỗi chữ cái viết hoa:

android:inputType="textCapCharacters"

Nhưng điều này sẽ chỉ thực hiện thay đổi cho bàn phím và người dùng có thể thay đổi chế độ để viết thư trong trường hợp nhỏ.

Vì vậy, cách tiếp cận này không được đánh giá cao nếu bạn thực sự muốn dữ liệu ở định dạng viết hoa, trước tiên hãy thêm lớp sau:

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

Và sau đó,

Bây giờ để viết hoa từng từ:

CapitalizeFirstLetter.capitaliseName(name);

Để viết hoa chỉ từ đầu tiên:

CapitalizeFirstLetter.capitaliseOnlyFirstLetter(data);

2

Đặt loại đầu vào trong XML cũng như trong tệp JAVA như thế này,

Trong XML,

android: inputType = "textMultiLine | textCapSentences"

Nó cũng sẽ cho phép multiline và trong tệp JAVA,

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

đảm bảo cài đặt Tự động viết hoa của bàn phím của bạn được bật .


2

Trong tệp XML bố trí của bạn:

  • bộ android:inputType="textCapSentences"

  • Trên EditTextbảng chữ cái đầu tiên của từ đầu tiên của mỗi câu là chữ hoa

  • Hoặc android:inputType="textCapWords"trên EditText của bạn để có bảng chữ cái đầu tiên của mỗi từ là chữ hoa


1

sử dụng mã này để chỉ viết hoa chữ cái đầu tiên cho 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

Trước đây nó từng là android:capitalize="words", mà bây giờ không được dùng nữa. Thay thế được đề nghị là sử dụngandroid:inputType="textCapWords"

Xin lưu ý rằng điều này sẽ chỉ hoạt động nếu bàn phím thiết bị của bạn tự động bật Cài đặt viết hoa.

Để làm điều này theo chương trình, sử dụng phương pháp sau:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);


0

tôi thành lập và giải pháp của tôi: bạn có 2 cách để giải quyết nó trong java:

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

và xml:

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

0

Lập trình

TextView firstline = (TextView) findViewById(R.id.firstline);
firstline.setAllCaps(true);

0

nếu bạn đang viết các kiểu trong tệp style.xml thì

xóa thuộc tính android: inputType và thêm dòng dưới đây

<item name="android:capitalize">words</item>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.