如何解决TextWatcher 或 InputFilter - 获取正在添加的文本并对其进行转换
所以,我有一个我不知道如何解决的情况。我需要实现一个 TextWatcher 或 InputFilter,它允许我存储用户输入的内容,但在 editText 上显示相同长度的随机字符串。
现在我通过对 EditText 使用 PasswordTransformationMethod 来实现这一点,但是现在我必须以随机字符串为基础的字符/字符串可以是符号或表情符号,并且这些字符/字符串由多个字符组成,因此 PasswordTransformationMethod 获胜不行。
到目前为止我最好的尝试是这个,但我找不到一种方法来检测正在从 editText 添加或删除的内容。
@Override
protected void afterTextChange(Editable s) {
Print.log(TAG,"///****** After text changed: " + s.toString());
Print.log(TAG,"///****** UN ENCRYPTED after: " + unEncryptedString);
mBinding.etMessage.removeTextChangedListener(this);
mBinding.etMessage.setFilters(new InputFilter[]{});
//calculate prev text
String textToAdd = "";
if (encryptedString.length() > 0) {
Print.log(TAG,"///**********We have something,and in the textview... " + mBinding.etMessage.getText().toString());
String whatIsNow = mBinding.etMessage.getText().toString();
if (whatIsNow.length() > encryptedString.length()) {
Print.log(TAG,"///******** User typed something");
} else if (whatIsNow.length() < encryptedString.length()) {
Print.log(TAG,"///******** User removed something");
} else {
Print.log(TAG,"///********* Pretty sure the user typed something from auto-text");
}
} else {
Print.log(TAG,"///**********nothing saved as encrypted,so add everything: " + s.toString());
textToAdd = s.toString();
}
Print.log(TAG,"///******* TEXT TO ADD: " + textToAdd);
String randomString = "";
String encryptStringAux = new SharedPrefUtil(requireContext()).getString(PREFERENCE_ENCRYPTION_STYLE_CUSTOM_STRING_KEY,PREFERENCE_ENCRYPTION_STYLE_CUSTOM_STRING_DEFAULT);
int legthToAdd = mBinding.etMessage.getText().length() - encryptedString.length();
Print.log(TAG,"///******** Length to add: " + legthToAdd);
if (legthToAdd < 0) {
if (Math.abs(legthToAdd) < encryptedString.length()) {
randomString = encryptedString.substring(0,encryptedString.length() - Math.abs(legthToAdd));
}
encryptedString = randomString;
} else {
for (int i = 0; i < legthToAdd; i++) {
if (!encryptStringAux.equals(PREFERENCE_ENCRYPTION_STYLE_CUSTOM_STRING_DEFAULT)) {
String[] splitString = encryptStringAux.split("@");
int random = new Random().nextInt(splitString.length);
randomString = randomString + splitString[random];
} else {
randomString = randomString + " ";
}
}
encryptedString = encryptedString + randomString;
}
Print.log(TAG,"///********** Random String: " + encryptedString);
mBinding.etMessage.setText(encryptedString);
mBinding.etMessage.setSelection(mBinding.etMessage.getText().length());
mBinding.etMessage.setFilters(inputFilter);
mBinding.etMessage.addTextChangedListener(this);
}
我也尝试过类似结果的 InputFilter。 谁能给我任何提示以找到解决方案? 非常感谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。