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

에디트 텍스트 입력한 글자 수 텍스트뷰로 출력하기 질문입니다.

0 추천

현재 xml의 에디트 텍스트 글자수 제한을 걸어두고 

에디트 텍스트에 입력하는 글자 바이트수를 텍스트뷰에 출력하는 기능을 구현하고 있는데요 

현재 소스 작업을 다음과 같이 하였습니다. 

그런데 앱에서 실행을 하면 계속 중지가 되는데요 잘못된 부분과 수정할 점좀 알려주세요. 

 

public class My_Review_Activity extends Activity {

EditText edit_myreview_review = (EditText) findViewById(R.id.edit_myreview_review);
TextView text_myreview_number = (TextView) findViewById(R.id.text_myreview_number);
 
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.my_review_main);
 
text_myreview_number.addTextChangedListener(cWatcher);
 
TextWatcher cWatcher = new TextWatcher() {
 
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
 
 
}
 
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
 
}
 
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
 
}
};
 
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;
 
}
 
   }
}
qwlwwmq (560 포인트) 님이 2014년 2월 12일 질문
qwlwwmq님이 2014년 2월 12일 수정

1개의 답변

0 추천

if (Strings.isNullOrEmpty(string)) { return 0; }

Strings << 이건 google guava 라이브러리에 있는 스트링 Null or Empty 검사입니다.

string == null || "".equals(string) 과 같은 메서드죠...

 

그리고 제가 드린 static int getLength 메서드는 글자수를 바이트로 계산해야하는 경우에 사용하는 메서드 입니다.

바이트 계산이 필요없다면 그냥

@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
int textLength = s.toString().length();
}
이렇게 얻으시면 되구요.
 
필요하다면
int textBytes = getLength(s.toString());
이렇게 하시면 됩니다.
 
 
리스너는 어짜피 하나의 EditText에만 넣으실꺼면 local변수 쓰지 마시고
 
text_myreview_number.addTextChangedListener(
new TextWatcher() {
 
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
 
 
}
 
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
 
}
 
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
 
}
}

);

 

이렇게 셋팅하세요.

칠리님 (10,910 포인트) 님이 2014년 2월 12일 답변
네 감사합니다. 덕분에 잘 해결하였네요^^
그런데 지금 layout에
android:maxLength="100"으로 글자수를 제한을 두니 100글자로 제한이 되는데요 이것을 100바이트로 제한을 거는법은 없을까요?
...