首页 > 解决方案 > 自定义 Xamarin Forms 应用程序中选项卡项上的焦点状态外观,Android 实现

问题描述

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

我知道如何根据状态更改项目的背景,我的问题是我找不到需要修改的样式或类似样式以更改TabbedPage.

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

app:tabBackground="@drawable/background_states"

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

我也尝试过更广泛地确定要覆盖的 Android 样式,但无济于事。

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

在此处输入图像描述

标签: androidxamarinxamarin.formsfocus

解决方案


由于标签栏位于页面底部,因此该栏由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);
}

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


推荐阅读