【问题标题】:[Xamarin.Forms][Android] Change back and next color in navigation[Xamarin.Forms][Android] 在导航中更改返回和下一个颜色
【发布时间】:2017-08-20 18:33:43
【问题描述】:

我有一些导航页面,我想覆盖后退按钮和下一个按钮的颜色 (ToolbarItem)

我已经尝试过 BarTextColor 属性,但它会更改所有导航标题文本的颜色。

在 IOS 中完成,但我无法找到适用于 android 的解决方案。

它适用于标题,但不适用于图标。

这是我的代码:

protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
    base.OnElementPropertyChanged(sender, e);

    var page = this.Element as NavigationPage;
    if (page != null && toolbar != null)
    {
        toolbar.SetTitleTextColor(Color.Black.ToAndroid());

        if (toolbar.NavigationIcon != null)
            toolbar.NavigationIcon.SetColorFilter(Color.Green.ToAndroid(), Android.Graphics.PorterDuff.Mode.Multiply);

        if (toolbar.OverflowIcon != null)
            toolbar.OverflowIcon.SetColorFilter(Color.Green.ToAndroid(), Android.Graphics.PorterDuff.Mode.Multiply);
    }    
}

【问题讨论】:

    标签: xamarin xamarin.android xamarin.forms


    【解决方案1】:

    我有一些导航页面,我想覆盖后退按钮和下一个按钮 (ToolbarItem) 的颜色

    您的下一个按钮是ToolbarItem,由您自己定义。因此,自定义它对您来说不是问题。困难的部分在于后退按钮,因为它是由Xamarin.Forms 提供的。您需要覆盖NavigationPageRenderer 来更改颜色:

    public class MyNavigationPageRenderer : NavigationPageRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<NavigationPage> e)
        {
            base.OnElementChanged(e);
            if (e.NewElement != null)
            {
                var navController = (INavigationPageController)e.NewElement;
                navController.PushRequested += NavController_PushRequested;
                navController.PopRequested += NavController_PopRequested;
            }
        }
    
        private void NavController_PopRequested(object sender, Xamarin.Forms.Internals.NavigationRequestedEventArgs e)
        {
            Device.StartTimer(TimeSpan.FromMilliseconds(220), () =>
            {
                ChangeIconColor();
                return false;
            });
        }
    
        private void NavController_PushRequested(object sender, Xamarin.Forms.Internals.NavigationRequestedEventArgs e)
        {
            ChangeIconColor();
        }
    
        private void ChangeIconColor()
        {
            int count = this.ViewGroup.ChildCount;
    
            var toolbar = GetToolbar();
    
            if (toolbar.NavigationIcon != null)
            {
                var drawable = (toolbar.NavigationIcon as DrawerArrowDrawable);
                drawable.Color = Resource.Color.material_grey_850;//set the navigation icon color here
            }
        }
    
        private AToolbar GetToolbar()
        {
            for (int i = 0; i < this.ViewGroup.ChildCount; i++)
            {
                var child = this.ViewGroup.GetChildAt(i);
                if (child is AToolbar)
                {
                    return (AToolbar)child;
                }
            }
    
            return null;
        }
    }
    

    对上述代码的一点解释:PushRequestPopRequest 在您将新页面推送并弹出到导航页面时触发,这是您自定义现有工具栏的NavigationIcon 的最佳时机。所以首先使用GetToolbar找到工具栏,然后用ChangeIconColor更改图标颜色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 2020-01-17
      • 2016-10-31
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多