无法将多色图像添加到Xamarin Forms中的TabbedPage导航栏中

时间:2019-12-16 12:04:31

标签: c# android xaml xamarin.forms tabbedpage

因此,当我为Android应用程序设计导航栏时,使其看起来像这样:enter image description here 我对此编码的唯一问题是,当我将每个图标的.png图像添加到MainPage.xaml上的XAML代码中时,图标最终看起来像这样(图标只是变成了没有其他颜色的黑色形状) 。 enter image description here

Android是否只能处理Android的单色图标? 有什么方法可以禁用此默认功能吗?

我知道android样式指南规定您不应在导航栏中为图标使用多种颜色,但是我需要对此应用程序进行例外处理。

1 个答案:

答案 0 :(得分:1)

如果要在Tabbedpage中使用彩色图标,则应为Tabbedpage创建自定义渲染器

using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Support.Design.Widget;
using Android.Views;
using Android.Widget;
using TabbedDemo.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using Xamarin.Forms.Platform.Android.AppCompat;

[assembly: ExportRenderer(typeof(TabbedPage), typeof(MyTabbedRenderer))]
namespace TabbedDemo.Droid
{
    public class MyTabbedRenderer : TabbedPageRenderer
    {
        public MyTabbedRenderer(Context context) : base(context)
        {
        }
        protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
        {
            base.OnElementChanged(e);
            if (e.OldElement == null && e.NewElement != null)
            {
                for (int i = 0; i <= this.ViewGroup.ChildCount - 1; i++)
                {
                    var childView = this.ViewGroup.GetChildAt(i);
                    if (childView is ViewGroup viewGroup)
                    {
                        for (int j = 0; j <= viewGroup.ChildCount - 1; j++)
                        {
                            var childRelativeLayoutView = viewGroup.GetChildAt(j);
                            if (childRelativeLayoutView is BottomNavigationView)
                            {
                                ((BottomNavigationView)childRelativeLayoutView).ItemIconTintList = null;
                            }
                        }
                    }
                }
            }
        }
    }
}

此处正在运行屏幕截图。

enter image description here