development

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

big-blog 2020. 7. 7. 07:11
반응형

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


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


안드로이드는 실제로 이것을 위해 내장 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);

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


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


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

첫 번째 방법 :

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

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


키보드 처리에 대해 걱정하는 대신 입력, 소문자 또는 대문자 만 허용하고 문자열을 대문자로 변환하면 안됩니다.

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

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

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


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


입력 필터 사용

editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});

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

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

끝난!


그냥 이렇게 :

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

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

에서 코 틀린 , .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"
    />

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


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

프로그래밍 방식으로 :

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

XML :

android:inputType="textCapCharacters" with Edittext

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

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

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

Based on the accepted answer, this answer does the same, but in Kotlin. Just to ease copypasting :·)

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

I'm using Visual Studio 2015/Xamarin to build my app for both Android 5.1 and Android 6.0 (same apk installed on both).

When I specified android:inputType="textCapCharacters" in my axml, the AllCaps keyboard appeared as expected on Android 6.0, but not Android 5.1. I added android:textAllCaps="true" to my axml and still no AllCaps keyboard on Android 5.1. I set a filter using EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() }); and while the soft keyboard shows lower case characters on Android 5.1, the input field is now AllCaps.

EDIT: The behavioral differences that I observed and assumed to be OS-related were actually because I had different versions of Google Keyboard on the test devices. Once I updated the devices to the latest Google Keyboard (released July 2016 as of this writing), the 'All Caps' behavior was consistent across OSes. Now, all devices show lower-case characters on the keyboard, but the input is All Caps because of SetFilters(new IInputFilter[] { new InputFilterAllCaps() });


Xamarin equivalent of ErlVolton's answer:

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

For me it worked by adding android:textAllCaps="true" and 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"
                    />

Simple kotlin realization

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

PS for me filters is always empty initially


A Java 1-liner of the proposed solution could be:

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

Note it needs com.google.common.collect.Lists.


Simply, Add below code to your EditText of your xml file.

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

And if you want to allow both uppercase text and digits then use below code.

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"

참고URL : https://stackoverflow.com/questions/15961813/in-android-edittext-how-to-force-writing-uppercase

반응형