You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:38:14