【发布时间】:2019-07-10 01:53:37
【问题描述】:
我想动态更改活动标签指示器的颜色。多个来源(Xamarin support、Xamarin docs)表明有一种方法可以做到这一点,但它必须作为特定于 android 的平台来完成
On<Android>().SetBarSelectedItemColor(color)
但是,我正在 Visual Studio 中的股票 android 模板中对此进行测试,但没有任何效果。我是在 TabbedPage 构造函数中运行它,还是稍后作为事件运行它都没有关系。
版本信息:
Xamarin 表单:3.5.0.129452
Visual Studio:15.9.7
Xamarin.Android SDK:9.1.7.0
特定平台是否仅在特定条件下有效?
代码:
除了一些颜色绑定实验之外,它是股票代码。
MainPage.xaml.cs(注意:App.OnChange 确实被触发并且代码按预期执行)
using System;
using Xamarin.Forms;
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
using Xamarin.Forms.Xaml;
namespace App1.Views
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class MainPage : Xamarin.Forms.TabbedPage
{
public MainPage()
{
InitializeComponent();
App.OnChange((prop, value) =>
{
if (prop == App.ActiveColorKey)
{
On<Xamarin.Forms.PlatformConfiguration.Android>().SetBarSelectedItemColor(Color.FromHex(value));
On<Xamarin.Forms.PlatformConfiguration.Android>().SetBarItemColor(Color.FromHex(value));
}
});
}
}
}
MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:App1.Views"
x:Class="App1.Views.MainPage" BarBackgroundColor="{DynamicResource TabColor}">
<TabbedPage.BarTextColor>
<OnPlatform x:TypeArguments="Color">
<On Platform="Android" Value="Green" />
</OnPlatform>
</TabbedPage.BarTextColor>
<TabbedPage.Children>
<NavigationPage Title="Browse">
<NavigationPage.Icon>
<OnPlatform x:TypeArguments="FileImageSource">
<On Platform="iOS" Value="tab_feed.png"/>
</OnPlatform>
</NavigationPage.Icon>
<x:Arguments>
<views:ItemsPage />
</x:Arguments>
</NavigationPage>
<NavigationPage Title="About dog" BarBackgroundColor="Red" BackgroundColor="Yellow">
<NavigationPage.Icon>
<OnPlatform x:TypeArguments="FileImageSource">
<On Platform="iOS" Value="tab_about.png"/>
</OnPlatform>
</NavigationPage.Icon>
<x:Arguments>
<views:AboutPage />
</x:Arguments>
</NavigationPage>
</TabbedPage.Children>
</TabbedPage>
【问题讨论】:
-
是的,这种方法只适用于 Xamarin.Android。你可以展示一些关于问题的代码。这里有一个类似的讨论供参考。(stackoverflow.com/questions/51606756/…)
-
您可以动态使用DynamicResource到
SetBarSelectedItemColor。我会贴出答案。需要注意DynamicResource的使用。docs.microsoft.com/en-us/xamarin/xamarin-forms/xaml/…,docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/…跨度> -
我已经更新了答案。
标签: c# android xamarin xamarin.forms