我为用户名的EditText和密码的EditText做了相同的addTextChangedListener。我希望风险用户在其长度达到限制字符数时输入更多。因此,我尝试通过烤面包警告用户,并删除他们输入的新字符。这是代码`
ETcreateusername.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(ETcreateusername.getText().length()>15){
ETcreateusername.dispatchKeyEvent(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
showToast();
}
}
private void showToast() {
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_username,(ViewGroup)findViewById(R.id.toast_root));
Toast toast= new Toast(getApplicationContext());
toast.setGravity(Gravity.TOP , 0, 800);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(layout);
toast.show();
}
@Override
public void afterTextChanged(Editable s) {
}
});
对于用户名的EditText,它可以完美地工作。但是,只要我在密码的EditText中输入太多字符,该应用就会崩溃,仅仅是因为其inputType是password。谁能告诉我原因,以及如何解决这个问题。谢谢。
答案 0 :(得分:0)
我认为这不是您要尝试执行的最佳实现。也许如果您添加某种提示来说明最小字符和最大字符是什么,则可以在xml中设置编辑文本的最大字符长度,如下所示:
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_user"
maxLenght="15" // This line
android:layout_width="match_parent"
android:hint="@string/login_hint_document"
android:inputType="number" />
答案 1 :(得分:0)
我的猜测是,您正在弄乱用于隐藏密码字符的逻辑。您应该尝试将逻辑移至beforeTextChanged
方法。感觉更安全