我收到了客户关于我在联想设备上的安卓应用程序的bug报告。
我注意到,当我将应用程序的语言环境设置为RTL语言(如波斯)或将Android语言改为波斯时,EditTexts或Textview的setTex()方法在原始字符串的开头和结尾插入两个额外字符。
例如:
String myString1 = "original string";
int length1 = myString1.length(); // length1 is 15
myEditText.setText(myString1);
String myString2 = myEditText.getText().toString();
int length2 = myString2.length(); // length2 is 17这个问题只发生在联想设备上。setText()方法在LEFT-TO-RIGHT OVERRIDE (U+202D)模式下添加LEFT-TO-RIGHT OVERRIDE (U+202D),在字符串末尾添加POP DIRECTIONAL FORMATTING (U+202C)。这在我的应用程序中造成了很大的问题。我有很多setText()方法。解决这个问题有什么简短的办法吗?
设备信息: Lenovo Tablet TB-8504X, Android 7.1.1
更新:是Android OS的问题吗?我能找到这个装置的任何修复方法吗?
发布于 2018-04-19 05:25:09
.length()和.getText().length()是完全相同的
然而, .getText().toString().length()在某些情况下是不同的。
首先,它不是String,而是CharSequence。因此,它基于格式,这可能会影响计算的大小。
发布于 2018-04-19 07:41:01
对此最好的解决方案是在注释中说明,即使用.trim()。但根据你说的,
我需要更短的解决方案。我必须添加很多trim()方法或类似的东西
似乎您的问题是定位每个用户并将.trim()添加到其中所花费的时间。如果是这样,只需使用IDE的替换函数即可。您可以通过指定整行来避免不必要的更改。
按CTRL + SHIFT + R
myEditText.getText().toString()
最后加上空格以避免类似于myEditText.getText()、.toString()、.lenght()之类的东西
代之以
myEditText.getText().toString().trim()
另一个是使用;的行
myEditText.getText().toString();
替换为
myEditText.getText().toString().trim();
因此,这涵盖了这个编辑文本的值用法的所有用途。希望这能有所帮助
https://stackoverflow.com/questions/49770358
复制相似问题