EditText의 첫 글자 대문자


383

나는 작은 개인 할 일 목록 앱을 작성하고 있으며 지금까지 모든 것이 잘 작동했습니다. 알아 내고 싶은 작은 단점이 하나 있습니다. 새 항목을 추가 할 때마다 EditText보기가있는 대화 상자가 나타납니다. EditText보기를 선택하면 키보드가 텍스트를 입력해야합니다. 대부분의 응용 프로그램에서 기본값은 Shift 키가 첫 번째 문자에 대해 유지되는 것으로 보이지만 내 견해로는이 작업을 수행하지는 않습니다. 수정하는 간단한 방법이 있어야하지만 참조를 반복적으로 검색했지만 찾을 수 없습니다. 어댑터가로드 한 참조에 대해 xml 속성이 있어야한다고 생각하지만 그것이 무엇인지 알 수 없습니다.

답변:


805

정적으로 (즉, 레이아웃 XML 파일에서) :에 설정 android:inputType="textCapSentences"하십시오 EditText.

프로그래밍 : 당신은 포함해야 InputType.TYPE_CLASS_TEXT에서 InputTypeEditText

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

모든 문장의 첫 문자의 대문자를 요청하기 위해 텍스트 및 변형과 결합 될 수 있습니다.

- 구글 문서


5
testEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); 또는 android : inputType = "textCapSentences"는 기기 키보드 자동 대문자 설정이 활성화 된 경우에만 작동합니다.
Lakshmanan

8
왜이 원인 내이 가능하지 않습니다 android:lines="7"(지금의 기본값은 1 개 라인에 다시) 더 이상 7 개 라인을 보여
제임스 Wierzba에게

3
estEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); 또는 android : inputType = "textCapSentences"는 기기 키보드 자동 대문자 설정이 활성화 된 경우에만 작동합니다. 프로그래밍 방식으로 이에 대한 대안은 무엇입니까?
스위프트

@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

13
이 답변은 실제로 OP의 질문에 도움이되지 않습니다. 입력 텍스트의 첫 번째 문자가 아닌 각 단어 의 첫 번째 문자를 대문자 로 사용합니다 (문장으로 가정). 이것은 아마도 다른 사람들에게 도움이 될 수 있지만 정답은 허용되는 답변입니다.
Andrew T.

37

XML의 EditText에 다음 줄을 적용하십시오.

android:inputType="textCapSentences|textMultiLine"

또한 다중 회선 지원도 허용합니다.


2
이 한 줄에 글고 치기를 축소하지 않을 것이다 유일한 솔루션이기 때문에 즉, 수락 된 대답해야한다
egorikem

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

또는 android:inputType="textCapSentences"에서만 작동 장치 키보드 자동 대문자 경우 설정 가능합니다.


난 그냥 비활성화 장치 키보드 자동 설정 대문자 때문에 덕분에, 나는 붙어 있었다
Pulkit

20

나는 똑같은 문제에 직면하여 내가 찾은 것을 공유했습니다. 당신과 다른 사람들을 도울 수 있습니다 ...

레이아웃에서 이것을 시도하십시오 EditText. 에서 아래 줄을 추가하십시오 .

android:inputType="textCapWords|textCapSentences"

나에게 잘 작동합니다 .. 그것은 당신에게도 효과가 있기를 바랍니다 ...


5

두 답변 모두 첫 글자를 대문자로하고 편집 텍스트를 한 줄로 만들지 않을 것입니다.

아래 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. android : inputType = "textCapSentences"
  2. android : inputType = "textCapWords"

textCapSentences
이것은 모든 문장에서 첫 단어의 첫 글자를 대문자로합니다.

textCapWords 모든 단어의 첫 글자를 대문자로 사용할 수 있습니다.

두 속성을 모두 사용하려면 | 두 속성 모두로 서명

android:inputType="textCapSentences|textCapWords"

3

이 코드를 사용하면 모든 단어의 첫 문자가 대문자로 표시됩니다.

-EditText보기에 addTextChangedListener를 설정하십시오.

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

다음과 같이 JAVA 파일뿐만 아니라 XML로 입력 유형을 설정하십시오.

XML에서

android : 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

나는 설립하고 내 솔루션 : 당신은 자바에서 그것을 해결하는 두 가지 방법이 있습니다 :

 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

프로그래밍 방식으로

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

0

styles.xml로 스타일을 작성하는 경우

android : inputType 속성을 제거 하고 아래 줄을 추가하십시오

<item name="android:capitalize">words</item>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.