Xamarin Forms应用Entry控件输入凭证时红米Note7 Pro MIUI重启问题求助
问题排查与修复思路
- 优先验证MIUI系统特定兼容点
当前代码中设置了Control.LongClickable = false和自定义CustomSelectionActionModeCallback,小米Note7 Pro适配的MIUI 11/12旧版本在输入敏感凭证类内容时,会触发系统级文本安全校验逻辑,自定义选择回调和禁用长按的配置会和系统校验逻辑冲突,导致系统服务崩溃重启。
临时验证方案:注释以下两行代码测试问题是否复现:Control.CustomSelectionActionModeCallback = new Callback(); Control.LongClickable = false; - 修正Drawable缩放参数错误
当前GetDrawable方法中缩放Bitmap时宽高参数写反:Bitmap.CreateScaledBitmap(bitmap, element.ImageHeight, element.ImageWidth, true),如果ImageHeight和ImageWidth数值差异较大,生成的异常尺寸Drawable会和MIUI输入框渲染逻辑冲突,触发底层渲染崩溃。修正代码为:Drawable d = new BitmapDrawable(Resources, Bitmap.CreateScaledBitmap(bitmap, element.ImageWidth, element.ImageHeight, true)); - 关闭MIUI安全键盘关联触发逻辑
小米Note7 Pro的MIUI系统识别到输入账号、密码类内容时会自动唤起系统安全键盘,若自定义Entry的键盘类型设为Email但实际用于输入密码类凭证,会触发系统输入类型校验冲突。可在Renderer中添加代码禁用系统自动填充和安全键盘关联:Control.ImportantForAutofill = ImportantForAutofill.No; if (Build.VERSION.SdkInt >= BuildVersionCodes.O) { Control.SetAutofillHints((string[])null); } - 优化焦点变化时的背景重绘逻辑
当前Control_FocusChange回调中每次都新建GradientDrawable设置背景,部分MIUI版本在输入法弹出时会频繁触发焦点回调,短时间多次重设背景可能引发渲染管线崩溃。可优化为全局仅初始化两次GradientDrawable,焦点变化时直接切换已实例化的对象,避免频繁创建对象。
内容的提问来源于stack exchange,提问作者Tusshar Kumar
相关产品推荐
相关产品推荐

