[Android实例] edittext右下角显示剩余字数
package com.myfiftycents.personchildactivity;
import java.security.PublicKey;
import javax.security.auth.PrivateCredentialPermission; import com.myfiftycents.R;
import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.text.InputFilter.LengthFilter;
import android.view.View;
import android.view.View.OnFocusChangeListener; import android.widget.EditText;
import android.widget.TextView;
public class PersonChildTextRelease extends Activity {
private EditText edit_person_text_release;
private TextView tv_person_text_release_number;
private static final int MAX_NUMBER = 300;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(https://www.wendangku.net/doc/6710370597.html,yout.activity_person_text_release);
edit_person_text_release = (EditText) findViewById(R.id.edit_person_text_release); tv_person_text_release_number = (TextView)
findViewById(https://www.wendangku.net/doc/6710370597.html,_person_text_release_number);
edit_person_text_release.clearFocus();
edit_person_text_release
.setSelection(edit_person_text_release.length());
edit_person_text_release.addTextChangedListener(mTextWatcher);
final String str = edit_person_text_release.getHint().toString().trim(); setLeftCount();
edit_person_text_release
.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View arg0, boolean arg1) {
if (arg1) {
edit_person_text_release.setHint("");
} else {
edit_person_text_release.setHint(str);
}
}
});
}
private TextWatcher mTextWatcher = new TextWatcher() { private int edit_start;
private int edit_end;
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable str) {
edit_start = edit_person_text_release.getSelectionStart();
edit_end = edit_person_text_release.getSelectionEnd();
edit_person_text_release.removeTextChangedListener(mTextWatcher); while (calculateLength(str.toString()) > MAX_NUMBER) {
str.delete(edit_start - 1, edit_end);
edit_start--;
edit_end--;
}
edit_person_text_release.setText(str);
edit_person_text_release.setSelection(edit_start);
edit_person_text_release.addTextChangedListener(mTextWatcher); setLeftCount();
}
};
private long calculateLength(CharSequence c) {
double len = 0;
for (int i = 0; i < c.length(); i++) {
int temp = (int) c.charAt(i);
if (temp > 0 && temp < 127) {
len += 0.5;
} else {
len++;
}
}
return Math.round(len);
}
private void setLeftCount() {
tv_person_text_release_number.setText(String.valueOf(MAX_NUMBER - getInputCount()));
}
private long getInputCount() {
return calculateLength(edit_person_text_release.getText().toString()); }
public static int getWordCount(String str) {
str = str.replaceAll("[^\\x00-\\xff]", "**");
int length = str.length();
return length;
}
}