使用ResourceDictionary动态更改Tabbar颜色

时间:2018-03-19 17:35:58

标签: android xamarin.forms

其实我的应用有2个主题(粉色和蓝色),由App.xaml中的ResourceDictionary处理

在设置页面中切换开关会以编程方式更改ResourceDictionary的值和元素根据需要更改(背景,文本颜色等)。 它可能不是最漂亮的方式,但它有效..

但我有一个问题是改变android中Tabbar的背景颜色。

enter image description here

它的颜色值在Android项目中设置(来自styles.xml和Tabbar.axml的colorPrimary)。

但我无法找到

  • 如何从我的PCL项目更改或访问此值。
  • 或者如何在Android项目中更改该colorPrimary的值 每次更改设置开关值时。
  • 或者,最佳解决方案使标签栏透明并制作它 重叠当前背景(如果我只设置Color.Transparent 现在变白了)

选项卡式页面代码由Xamarin表单项目创建。

public MainPage()
        {
        Page centerPage, rightPage, leftPage;

        string TitleCenter = "S'exercer";
        string TitleLeft = "Comprendre";
        string TitleRight = "Aller plus loin";

        switch (Device.RuntimePlatform)
        {
            case Device.iOS:
                centerPage = new NavigationPage(new Center_Main())
                {
                    Title = TitleCenter
                };

                rightPage = new NavigationPage(new Right_Main())
                {
                    Title = TitleRight
                };
                leftPage = new NavigationPage(new Left_Main())
                {
                    Title = TitleLeft
                };
                centerPage.Icon = "tab_feed.png";
                rightPage.Icon = "tab_about.png";
                leftPage.Icon = "offline_logo.png";
                break;

            default:
                centerPage = new Center_Main()
                {
                    Title = TitleCenter
                    // Nothing tab related here
                };

                rightPage = new Right_Main()
                {
                    Title = TitleRight
                };

                leftPage = new Left_Main()
                {
                    Title = TitleLeft
                };

                break;
        }

由于

2 个答案:

答案 0 :(得分:1)

使用Xaml就是这样的:

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" BarBackgroundColor="your_Color"></Tabbedpage>

以编程方式:

 TabbedPage page=new Tabbedpage(){ BarBackgroundColor=Color.Blue};

您可以在tabbedPage构造函数中执行以下操作:

 public MainPage()
 {
    BarBackgroundColor=Color.Blue;
 }

注意:可以使用静态资源代替颜色名称。

像这样的东西

<... BarBackgroundColor={StaticResource color_name}>

答案 1 :(得分:0)

也许如果你直接进入填充Tabbar的颜色:

XAML:

<ContentPage Title = "Menu" BackgroundColor = "{DynamicResource primary_colour}">

的MainPage。

Application.Current.Resources ["primary_colour"] = Color.Green;