我收到了客户关于我在联想设备中的Android应用程序的错误报告。
我注意到,当我将应用的语言环境设置为波斯语等RTL
语言或将Android操作系统的语言更改为波斯语时,{{1 setTex()
或EditText
的方法在原始字符串的开头和结尾插入两个额外的字符。
例如:
Textview
仅在Lenovo设备上出现此问题。 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()
,在RTL模式下在我的字符串末尾添加LEFT-TO-RIGHT OVERRIDE (U+202D)
。
这会导致我的应用程序出现大问题。我有很多POP DIRECTIONAL FORMATTING (U+202C)
方法。
解决这个问题有什么简短的解决方案吗?
设备信息: setText()
更新
是Lenovo Tablet TB-8504X, Android 7.1.1
的问题吗?我可以找到该设备的任何修复程序吗?
答案 0 :(得分:3)
.length()
和。getText().length()
他们是相同的
然而 .getText().toString().length()
在某些情况下有所不同。
首先,它不是String
,而是CharSequence
。因此,它基于格式,可能会影响计算的大小。
答案 1 :(得分:2)
使用.trim()
的评论中说明了最佳解决方案。但根据你的说法,
我需要更短的解决方案。我必须添加许多trim()方法或类似的东西
您的问题似乎是定位每个用户并向其添加.trim()
的时间消耗。如果是这种情况,只需使用IDE的replace函数即可。您可以通过指定整行来避免不必要的更改。
按 CTRL + SHIFT + R
myEditText.getText().toString()
最后用空格来避免类似myEditText.getText()。toString()。lenght()
替换为
myEditText.getText().toString().trim()
另一个是;
myEditText.getText().toString();
替换为
myEditText.getText().toString().trim();
因此,这涵盖了此editText值使用的所有用法。希望这有帮助