微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TextWatcher 或 InputFilter - 获取正在添加的文本并对其进行转换

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?