Xamarin.Forms安卓8设备禁用控件焦点高亮问题咨询
解决Xamarin.Forms Android 8物理键盘控件高亮问题
我懂你碰到的这个糟心问题——Android 8新增的这个物理键盘焦点高亮,光在Manifest里加android:defaultFocusHighlightEnabled="false"确实有时候不生效,大概率是被更细粒度的设置给覆盖了。给你几个实测有效的解决办法:
1. 窗口级别强制禁用(最快见效)
直接在MainActivity的OnCreate方法里给窗口设置这个属性,优先级比Manifest的全局设置更高,能覆盖绝大多数控件的默认行为:
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // 禁用整个窗口的默认焦点高亮 Window.SetDefaultFocusHighlightEnabled(false); Xamarin.Essentials.Platform.Init(this, savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); LoadApplication(new App()); }
2. 自定义渲染器针对特定控件处理
如果不想全局禁用,只想给Entry、Button这类常用控件去掉高亮,可以写个自定义渲染器精准控制:
比如针对Entry控件的示例:
using Android.Content; using YourAppNamespace.Droid; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; [assembly: ExportRenderer(typeof(Entry), typeof(NoHighlightEntryRenderer))] namespace YourAppNamespace.Droid { public class NoHighlightEntryRenderer : EntryRenderer { public NoHighlightEntryRenderer(Context context) : base(context) { } protected override void OnElementChanged(ElementChangedEventArgs<Entry> e) { base.OnElementChanged(e); if (Control != null) { // 给单个控件禁用焦点高亮 Control.SetDefaultFocusHighlightEnabled(false); } } } }
Button、Picker等其他控件可以照搬这个逻辑,替换对应的控件类型和渲染器基类就行。
3. 排查样式或第三方库冲突
要是上面两种方法都没用,就得检查下你项目里的Android样式文件(res/values/styles.xml),或者有没有第三方UI库偷偷设置了焦点高亮。比如看看有没有类似这样的配置:
<item name="android:focusable">true</item> <item name="android:focusableInTouchMode">true</item> <item name="android:background">@drawable/custom_focus_background</item>
如果有自定义的焦点背景drawable,要么删掉这个配置,要么把对应的高亮逻辑去掉。
内容的提问来源于stack exchange,提问作者Rodrigo Juarez
相关产品推荐
相关产品推荐

