마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

에디트 텍스트 글자수 제한 및 입력 테스트값 나타내는 기능 질문입니다.

0 추천
게시판에 글을 작성하는 기능을 구현 중인데요.

글을 입력할 수 있는 글자수를 제한하고 따로 텍스트 뷰에 입력되어있는 글자수를 (365/1000) 이런식으로  나타나게 해주고 싶은데요 어떻게 구현해야 하나요?
qwlwwmq (560 포인트) 님이 2014년 2월 12일 질문

1개의 답변

0 추천

xml 에서는 android:maxLength

code 에서는 setFilters를 이용하세요

 

입력 글자 변경시마다 콜백받을 수 있게 아래 리스너를 사용하시구요

TextView.addTextChangedListener(TextWatcher watcher);

 

글자수는 자바 String으로 영문이던 한글이던 1자로 처리하시려면 그냥 갯수 얻어서 사용하시구요

영문이나 문자등은 1byte 한글은 2byte 이런식으로 계산하시려면

String에 codePointAtXXX 라는 함수가 있습니다. 이걸 이요하시면 되구요

 

/**
 * String code point를 이용한 한글/영어 구분으로 바이트 단위 길이 체크를 합니다.
 *
 * @param string the string
 * @return ex) 가나다 == 6, abcd = 4
 */
public static int getLength(String string) {
	if (Strings.isNullOrEmpty(string)) {
		return 0;
	}
	int length = string.length();
	int charLength = 0;
	for (int i = 0; i < length; i++) {
		charLength += string.codePointAt(i) > 0x00ff ? 2 : 1;
	}
	return charLength;
}

 

칠리님 (10,910 포인트) 님이 2014년 2월 12일 답변
아직 왕초보라 미흡한 점이 많아 이해가 안되는 부분이 있어 다시 질문 드립니다.
현재 에디트 텍스트를
<EditText
            android:id="@+id/edit_myreview_review"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:layout_centerInParent="true"
            android:layout_alignParentTop="true"
            android:gravity="left"
            android:maxLength="600"/>
로 xml을 구성하고

입력한 단위 길이를 체크하는 xml을
<TextView
            android:id="@+id/text_myreview_number"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="245dp"
            android:layout_marginTop="270dp"
            />
다음과 같이 구성하였습니다.
그리고 코드 부분에
public static int getLength(String string) {
            if(Strings.isNullOrEmpty(string)){
                return 0;
            }
            int length = string.length();
            int charLength = 0;
            for (int i = 0; i < length; i++) {
                charLength += string.codePointAt(1) > 0x00ff ? 2 : 1;
               
            }
           
            return charLength;
           
        }
       
이렇게 작성하였는데 if문에서 strings부분에서
Stringd cannot be resolved에러가 발생하는데요 어떻게 수정해야되나요?
Strings 는 guava라이브러리입니다.
그냥 null check 와 equals empty 체크로 변경하시면됩니다.
...