Android设置maxLines=4的多行EditText输入超4行数字点击崩溃问题
根因说明
该崩溃属于Android原生TextView/EditText的已知底层bug,触发条件为:控件设置了maxLines属性,且输入了无自动换行的超长连续字符(如连续数字、无空格的长英文串),点击控件触发光标定位逻辑时,系统对文本行的长度计算错误,最终抛出数组越界异常。
修复方案
可根据业务场景任选以下方案实现:
- 方案1:设置简单换行策略
在XML的EditText节点中新增属性即可,修改成本最低,适配90%以上的业务场景:
如需代码动态设置,调用如下方法:android:breakStrategy="simple"et_NewComment.setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE); - 方案2:修改输入类型配置
在原有inputType属性后追加无联想标识,规避部分系统版本输入法联想逻辑导致的文本计算异常:android:inputType="textMultiLine|textNoSuggestions" - 方案3:兜底异常捕获
如果需要兼容极端老旧系统版本,可自定义EditText重写触摸事件,捕获该类异常避免直接崩溃:
之后将布局中声明的public class CrashSafeEditText extends AppCompatEditText { public CrashSafeEditText(Context context) { super(context); } public CrashSafeEditText(Context context, AttributeSet attrs) { super(context, attrs); } public CrashSafeEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean onTouchEvent(MotionEvent event) { try { return super.onTouchEvent(event); } catch (ArrayIndexOutOfBoundsException e) { // 捕获系统底层异常,避免崩溃 return false; } } }EditText替换为自定义的CrashSafeEditText即可。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

