Android RTL布局下EditText输入指针断裂问题求助
解决RTL布局下Number类型EditText光标断裂问题
我之前帮同事处理过一模一样的问题!在阿拉伯语RTL布局模式下,带inputType="number"的EditText确实容易出现光标断裂的情况,尤其是设置了gravity="center"之后,这个问题会更明显。下面是亲测有效的几个解决方案:
方案1:设置文本方向为LTR(最简便)
因为阿拉伯语环境下数字输入本身是遵循从左到右的逻辑的,给EditText添加android:textDirection="ltr"属性,就能让系统按照LTR的规则渲染光标,直接解决断裂问题。修改后的XML代码如下:
<EditText android:id="@+id/et_budget" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="15dp" android:background="@drawable/white_background_theme_border" android:ems="10" android:gravity="center" android:hint="@string/choose_budget" android:inputType="number" android:padding="15dp" android:textAppearance="?android:attr/textAppearanceLarge" android:textColorHint="@android:color/black" android:textDirection="ltr" />
这个设置完全不会影响阿拉伯语用户的输入体验,数字依然会正常显示和输入。
方案2:明确指定允许输入的字符
如果方案1没起作用,可以尝试添加android:digits="0123456789"属性,强制限定输入内容为数字,有时候能绕过系统的RTL渲染bug:
<EditText <!-- 其他属性保持不变 --> android:digits="0123456789" />
方案3:针对旧Android版本的适配
如果你的应用需要兼容Android 8.0(API 26)以下的版本,这类系统本身存在RTL布局下光标渲染的兼容性问题,可以在代码里动态设置光标相关参数:
EditText etBudget = findViewById(R.id.et_budget); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { etBudget.setHorizontallyScrolling(true); }
开启横向滚动有时候也能修复光标断裂的异常。
内容的提问来源于stack exchange,提问作者Viswas Kg
相关产品推荐
相关产品推荐

