自定义 Xamarin Forms 应用中选项卡项的焦点状态外观,Android 实现

Customize focused state appearance on tab item in Xamarin Forms app, Android implementation

在我的跨平台 Xamarin Forms 应用程序中,特别是在 Android 上,我希望能够自定义 Xamarin.Forms.TabbedPage 导航栏中项目的外观。特别是,我希望能够将栏中聚焦项目的背景从实心浅灰色裁剪圆(见下图)更改为不同的形状,例如绿色矩形框(实际形状并不重要)。

我知道如何根据状态更改项目的背景,我的问题是我找不到我需要修改哪种样式或类似样式来更改 TabbedPage 中导航项目的背景。

通常对于 Xamarin Forms 应用程序的 Android 应用程序项目,Tabbar.axml 文件包含在 Resources/Layout 文件夹,但我在此文件中所做的任何更改似乎都不适用于导航选项卡的外观。例如,我尝试添加以下行:

app:tabBackground="@drawable/background_states"

但我看不到任何表明我的更改已应用的迹象。

我也曾尝试更普遍地识别要覆盖的 Android 样式,但无济于事。

任何人都可以在正确的方向上推动我解决我的问题吗?

由于选项卡栏位于页面底部,因此该栏由 BottomNavigationView 表示。因此,我需要通过自定义 TabbedPage 渲染器应用所需的背景样式。

在渲染器中,按如下方式覆盖 OnElementChanged

protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
{
    base.OnElementChanged(e);

    if (e.NewElement == null) return;

    // Identify first (only) bottom navigation view in collection of element children.
    var bottomNavigationView = GetBottomNavigationView(ViewGroup);

    // Apply a custom border style for the item background.
    bottomNavigationView.ItemBackground =
        Resources?.GetDrawable(Resource.Drawable.background_states, Context?.Theme);
}

其中GetBottomNavigationView是一种遍历子元素树的方法,需要单独实现(为简洁起见,此处省略)。可绘制资源 background_states 是用于根据状态应用不同背景的选择器。