联想设备中RTL语言的EditText.setText()方法中的奇怪错误

时间:2018-04-11 08:37:30

标签: android android-edittext right-to-left

我收到了客户关于我在联想设备中的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的问题吗?我可以找到该设备的任何修复程序吗?

2 个答案:

答案 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值使用的所有用法。希望这有帮助