自定义 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
是用于根据状态应用不同背景的选择器。
在我的跨平台 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
是用于根据状态应用不同背景的选择器。