如何在Android中使用InputFilter来最大化EditText中的字符数?
问题是在60个字符后停止显示,但它仍然继续键入,只是文本没有显示,但它确实显示在“缓冲区”(表示建议的内容)中如何在Android中使用InputFilter来最大化EditText中的字符数?,android,android-edittext,Android,Android Edittext,问题是在60个字符后停止显示,但它仍然继续键入,只是文本没有显示,但它确实显示在“缓冲区”(表示建议的内容)中 另一个问题是,调用imageview1 onClick事件后,类型为continue,但文本不显示在编辑文本中。下面的代码片段将帮助您处理输入文件管理器 对我来说,它就像一个符咒 public class MainActivity extends Activity { EditText editText1; ImageView imageView1; @Override protec
另一个问题是,调用imageview1 onClick事件后,类型为continue,但文本不显示在编辑文本中。下面的代码片段将帮助您处理输入文件管理器 对我来说,它就像一个符咒
public class MainActivity extends Activity {
EditText editText1;
ImageView imageView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText1 = (EditText) findViewById(R.id.txtMarketName);
imageView1 = (ImageView) findViewById(R.id.imgDelete);
final EditTextLocker locker1 = new EditTextLocker(editText1);
locker1.limitCharacters(60);
editText1.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if (!hasFocus) {
imageView1.setVisibility(View.INVISIBLE);
} else {
imageView1.setVisibility(View.VISIBLE);
}
}
});
imageView1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
editText1.setText("");
}
});
}
}
InputFilter过滤器=新的InputFilter(){
公共CharSequence筛选器(CharSequence源、int开始、int结束、,
跨越目的地,起始点,终止点){
对于(inti=start;i
public class EditTextLocker {
private EditText editText;
private int charactersLimit;
public EditTextLocker(EditText editText) {
this.editText = editText;
editText.setOnKeyListener(editTextOnKeyListener);
}
private OnKeyListener editTextOnKeyListener = new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DEL) {
startStopEditing(false);
}
return false;
}
};
private TextWatcher editTextWatcherForCharacterLimits = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if (!editText.getText().toString().equalsIgnoreCase("")) {
int editTextLength = editText.getText().toString().trim()
.length();
if (editTextLength >= charactersLimit) {
startStopEditing(true);
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
};
public void limitCharacters(final int limit) {
this.charactersLimit = limit;
editText.addTextChangedListener(editTextWatcherForCharacterLimits);
}
public void unlockEditText() {
startStopEditing(false);
}
public void startStopEditing(boolean isLock) {
System.out.println("Start Stop Edit ==============> : " + isLock);
if (isLock) {
editText.setFilters(new InputFilter[] { new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend) {
return len < 1 ? dest.subSequence(dstart, dend)
: "";
}
} });
} else {
editText.setFilters(new InputFilter[] { new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend) {
return null;
}
} });
}
}
}
public class MainActivity extends Activity {
EditText editText1;
ImageView imageView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText1 = (EditText) findViewById(R.id.txtMarketName);
imageView1 = (ImageView) findViewById(R.id.imgDelete);
final EditTextLocker locker1 = new EditTextLocker(editText1);
locker1.limitCharacters(60);
editText1.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if (!hasFocus) {
imageView1.setVisibility(View.INVISIBLE);
} else {
imageView1.setVisibility(View.VISIBLE);
}
}
});
imageView1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
editText1.setText("");
}
});
}
}
InputFilter filter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
if (!Character.isLetterOrDigit(source.charAt(i))) {
return "";
}
}
return null;
}
};
edit.setFilters(new InputFilter[]{filter});