Android EditText에서 대문자를 강제로 쓰는 방법은 무엇입니까?


144

내 안드로이드 응용 프로그램 EditText에서 사용자가 정보를 입력 할 수있는 곳 이 다릅니다 . 그러나 사용자가 대문자로 쓰도록 강요해야합니다. 그렇게하는 기능을 알고 있습니까?

답변:


340

안드로이드는 실제로 이것을 위해 내장 InputFilter를 가지고 있습니다 !

edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

조심 setFilters 다른 모든 속성 재설정됩니다 XML을 통해 설정했다 (즉 maxLines, inputType, imeOptinos...). 이를 방지하려면 기존 필터에 필터를 추가하십시오.

InputFilter[] editFilters = <EditText>.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = <YOUR_FILTER>;  
<EditText>.setFilters(newFilters);

3
예! 이것이 가장 좋은 대답입니다! 코드는 그래야합니다 edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});.
Arthur

4
자네가 맞아, 나는 내 대답을 업데이트했다. 개선에 도움을 주셔서 감사합니다 !!
ErlVolton

4
xml에 설정 한 필터 (예 :)를 재정의하지 않으려면 에 배열 maxLength을 추가하십시오 . 참조 stackoverflow.com/a/18934659/3890983InputFilter.AllCaps()editText.getFilters
열대어

21
또는 Kotlin에서editText.filters = editText.filters + InputFilter.AllCaps()
Ilia Kurtov

4
더 나은 아직 : editText.filters += InputFilter.AllCaps()Kotlin은 훌륭합니다! <3
Milack27

123

당신이 원하는 경우 에 쓰기에 대한 사용자 강제로 대문자를 기본으로 하여 글고 치기에, 당신은 추가해야합니다 android:inputType="textCapCharacters". (사용자는 여전히 수동으로 소문자로 변경할 수 있습니다.)


39
아무것도 사용자가 'shift'를 누르고 소문자를 쓰지 못하게합니다.
Fernando Leal

Fernando에 동의하십시오. 키보드는 기본적으로 대문자로 설정되어 있지만 필수는 아닙니다.
pforhan

@Fernando 말했다으로 사용자가 작은 경우 문자를 입력하는 시프트 버튼을 사용할 수 있습니다
Ajinkya

24

(가) 설정 input typeTYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS. 는 keyboard그것을 존중해야한다.


android : inputType = "textCapCharacters"
Parth Kapoor

18

양방향으로 사용할 수 있습니다.

첫 번째 방법 :

android:inputType="textCapSentences"EditText에서 설정 하십시오.

두 번째 방법 :

사용자가 숫자를 입력하면 텍스트 감시자를 사용해야하고 소문자를 대문자로 변경해야합니다.

edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {            

    }
        @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {             
    }
    @Override
    public void afterTextChanged(Editable et) {
          String s=et.toString();
      if(!s.equals(s.toUpperCase()))
      {
         s=s.toUpperCase();
         edittext.setText(s);
         edittext.setSelection(edittext.length()); //fix reverse texting
      }
    }
});  

2
문자열을 역순으로 설정하기 때문에 솔루션이 작동하지 않습니다.
co2f2e

첫 번째 또는 두 번째 방법을 사용했습니다.
Harshid

첫 번째는 전혀 작동하지 않습니다. 두 번째는 텍스트를 대문자로 만들지 만 프로그래밍 방식으로 문장의 끝으로 커서를 설정해야합니다.
co2f2e

@Kalanamith 나중에 문제가 무엇
Harshid

6
첫 번째 옵션 인 textCapSentences가 문장을 대문자로하려면 textCapCharacters가 필요합니다.
Ghoti

13

android:textAllCaps="true"EditText에서 XML 파일에 속성을 추가 할 수 있습니다 . 그러면 소프트 입력 키보드가 모든 캡 모드에 나타납니다. 입력 한 값이 대문자로 나타납니다. 그러나 사용자가 UpperCase문자 만 입력 할 수있는 것은 아닙니다 . 원하는 경우 여전히 소문자로 넘어갈 수 있습니다. 의 출력이 Edittext모든 대문자로 표시되도록하려면 클래스의 toUpperCase()메소드를 사용하여 입력 문자열을 수동으로 변환해야합니다 String.


@GustavoAlves, 당신이 이것을 시도했을 때 무슨 일이 있었는지 말해 줄 수 있습니까? 문제를 살펴볼 수 있습니다. :)
Abhishek

안녕하세요 @Abhishek. 속성을 설정해도 아무런 변화가 없습니다. EditText는 여전히 대문자와 소문자를 모두 허용합니다.
거스 코스타

1
예, 대문자 만 허용하도록 EditText를 제한하려면 android : inputType = "textCapCharacters"가 올바른 옵션입니다. 시도해보고 알려주십시오. ☺️
Abhishek

1
이로 인해 입력 할 때마다 범위를 벗어난 예외가 발생했습니다.
Zapnologica

2
android:textAllCaps="true"TextView의 속성입니다 ( stackoverflow.com/a/28803492/5268730 ). android:inputType="textCapCharacters"대신 사용하십시오 .
woodii

11

android:inputType="textCapCharacters"xml 파일에 Edittext를 넣어야 합니다.


9
AoyamaNanami는 정확히 같은 대답을 썼습니다. 더 최근의 질문에 집중하십시오, 이것은 2013 년부터입니다. :)
ByteHamster

2
사용자는 더 낮은 문자를 이동하고 입력 할 수 있습니다.
Rafa0809

10

키보드 처리에 대해 걱정하는 대신 입력, 소문자 또는 대문자 만 허용하고 문자열을 대문자로 변환하면 어떨까요?

다음 코드가 도움이 될 것입니다.

EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase

문자열을 대문자로 입력해야한다는 것을 사용자가 알 필요가 없으므로 사용하기 편리합니다. 도움이 되었기를 바랍니다.


9

더 나은 ... 하나 라이너코 틀린 ...

// gets your previous attributes in XML, plus adds AllCaps filter    
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())

끝난!


2
속성 액세스 구문을 사용하여 작성할 수 있습니다. <your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
Makotosan

8
더 나은 아직 :<your_edit_text>.filters += InputFilter.AllCaps()
Makotosan

9

에서 코 틀린 , .kt 파일 메이크업의 변화 :

edit_text.filters = edit_text.filters + InputFilter.AllCaps()

아이디가있는 위젯에 직접 액세스하려면 합성 속성을 사용하십시오. 그리고 XML에서 편집 텍스트에 대해 다음과 같이 플래그를 두 개 더 추가하십시오.

<EditText
    android:id="@+id/edit_text_qr_code"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ...other attributes...
    android:textAllCaps="true"
    android:inputType="textCapCharacters"
    />

이렇게하면 키보드가 대문자로 활성화됩니다.



6
edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {            

    }
        @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {             
    }
    @Override
    public void afterTextChanged(Editable et) {
          String s=et.toString();
      if(!s.equals(s.toUpperCase()))
      {
         s=s.toUpperCase();
         edittext.setText(s);
      }
      editText.setSelection(editText.getText().length());
    }
});  

6

그냥 이렇게 :

// ****** Every first letter capital in word *********
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textCapWords"
    />

//***** if all letters are capital ************

    android:inputType="textCapCharacters"

5

아래 코드 중 하나를 사용하여 문제를 해결할 수 있습니다.

프로그래밍 방식으로 :

editText.filters = editText.filters + InputFilter.AllCaps()

XML :

android:inputType="textCapCharacters" with Edittext

4

나를 위해 android : textAllCaps = "true"android : inputType = "textCapCharacters" 를 추가하여 작동했습니다 .

<android.support.design.widget.TextInputEditText
                    android:layout_width="fill_parent"
                    android:layout_height="@dimen/edit_text_height"
                    android:textAllCaps="true"
                    android:inputType="textCapCharacters"
                    />

3

모든 자본을 얻으려면 XML에서 다음을 사용하십시오.

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAllCaps="true"
    android:inputType="textCapCharacters"
/>

2
이 솔루션을 사용해 보셨습니까? 이것은 사용자가 editext의 내용을 편집하기 시작할 때 응용 프로그램의 충돌을 일으킨다
surhidamatya

3

이 코드를 시도하면 대문자로 입력됩니다

edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

2

허용 된 답변을 바탕 으로이 답변은 동일하지만 Kotlin에서 수행됩니다. 복사 붙여 넣기를 쉽게하기 위해 : ·)

private fun EditText.autocapitalize() {
    val allCapsFilter = InputFilter.AllCaps()
    setFilters(getFilters() + allCapsFilter)
}

1
filters += InputFilter.AllCaps(): D
crgarridos

1

edittext를 클릭 할 때 대문자 키보드 를 얻으 려면 XML 에서이 코드를 사용하십시오.

<EditText
    android:id="@+id/et"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:hint="Input your country"
    android:padding="10dp"
    android:inputType="textCapCharacters"
    />

1

Visual Studio 2015 / Xamarin을 사용하여 Android 5.1 및 Android 6.0 (둘 다 동일한 APK가 설치됨) 용 앱을 빌드하고 있습니다.

android:inputType="textCapCharacters"내 axml에 지정 하면 AllCaps 키보드가 Android 6.0에서는 예상대로 나타나지만 Android 5.1에서는 나타나지 않았습니다. android:textAllCaps="true"Android 5.1에서 내 axml을 추가 했지만 여전히 AllCaps 키보드가 없습니다. 필자 EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });는 Android 5.1에서 소프트 키보드가 소문자를 표시하는 동안 필터를 설정 했지만 입력 필드는 이제 AllCaps입니다.

편집 : 내가 OS 관련 것으로 관찰하고 가정 한 행동 차이는 실제로 테스트 장치에 다른 버전의 Google 키보드가 있기 때문에 발생했습니다 . 기기를 최신 Google 키보드로 업데이트하면 (이 글을 쓰는 시점에 2016 년 7 월 출시) '모든 대문자'동작이 여러 OS에서 일관되었습니다. 이제 모든 장치는 키보드에 소문자를 표시하지만 입력은 모두 대문자입니다.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });


1
안녕하세요, Tony, 2 개의 계정을 만든 것 같습니다. stackoverflow.com/users/6764633/tony-celiastackoverflow.com/users/6771440/deeveedee . 병합하려면 stackoverflow.com/help/merging-accounts를 참조하십시오 .
Matt

고마워, 매트 이것을 초급 학습 / 실수에 분필로 적으십시오. 내가 지적 할 때까지 다른 계정을 만들었 음을 기억하지 못했습니다. 운 좋게도 계정 병합 기능은 간단했습니다. 좋은 포럼!
Tony

1

ErlVolton의 답변과 동일한 Xamarin :

editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());

이것이 C #이 간결한 방법을 좋아하는 이유입니다.
Lionet Chen

1

간단한 코 틀린 구현

fun EditText.onlyUppercase() {
    inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
    filters = arrayOf(InputFilter.AllCaps())
}

나를위한 PS filters는 처음에는 항상 비어 있습니다.


0

제안 된 솔루션의 Java 1 라이너는 다음과 같습니다.

editText.setFilters(Lists.asList(new InputFilter.AllCaps(), editText.getFilters())
    .toArray(new InputFilter[editText.getFilters().length + 1]));

필요합니다 com.google.common.collect.Lists.


-1

간단히, 아래 코드를 xml 파일의 EditText에 추가하십시오.

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

대문자와 숫자를 모두 허용하려면 아래 코드를 사용하십시오.

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"

2
그것은 확실히 작동하지만, 그것은 좋은 사용자 경험이 아닙니다. 방금 시도해 보았고 키보드가 자동으로 대문자를 사용하지 않기 때문에 (N 이상) 소문자 유형의 문자는 사용자에게 피드백없이 무시되어 UI가 깨져 보입니다.
MattMatt

@MattMatt에 완전히 동의합니다. 그렇게하면 사용자는 소문자를 입력 할 수 없습니다. 사용자는 원하는 대소 문자를 입력 할 수 있어야하며 나머지는 자동으로 단어를 대문자로 표시해야합니다.
Mir Adnan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.