【问题标题】:Bottom navigation bar gradient has unexpected appearance底部导航栏渐变有意外的出现
【发布时间】:2020-07-18 07:50:31
【问题描述】:

我让我的应用程序与 Shell 页面一起工作,因为它可以很好地控制布局外观和整体易用性,到目前为止它对我很有帮助。

渐变应该平滑地从左侧颜色转移到右侧颜色,这是两种蓝色阴影。

已将渐变可绘制对象应用于工具栏/顶部导航栏,效果与预期一样,但是当我对底部导航栏重复相同的过程时,出现了一些奇怪的伪影。

在纵向中,条的最末端是黑色的,然后横向看到渐变仅适用于顶部的细条。当应用程序的 MainPage 属性已设置时,第三个工件也会出现,即使该页面已被 PopToRoot 关闭,我也可以在下面看到我拥有的确认按钮。

如果我在屏幕上拖动,我可以看到渐变边缘有点偏离,边缘呈锯齿状。

使用的颜色:

#0033D5

#002394

工具栏(工作)

        protected override IShellToolbarAppearanceTracker CreateToolbarAppearanceTracker()
        {
            return new GradientShellToolbarAppearanceTracker(this);
        }
        public override void SetAppearance(Android.Support.V7.Widget.Toolbar toolbar, IShellToolbarTracker toolbarTracker, ShellAppearance appearance)
        {
            base.SetAppearance(toolbar, toolbarTracker, appearance);

            var gradient = new GradientDrawable(
                GradientDrawable.Orientation.LeftRight,
                new int[] { 
                    GradientShellPageColorTracker.ToolbarTopColor.ToAndroid(),
                    GradientShellPageColorTracker.ToolbarBottomColor.ToAndroid() }
                );

            toolbar.SetBackground(gradient);
        }

底部导航栏(未按预期工作)

        protected override IShellBottomNavViewAppearanceTracker CreateBottomNavViewAppearanceTracker(ShellItem shellItem)
        {
            return new GradientShellBottomTabBarAppearanceTracker(this, shellItem);
        }
        public override void SetAppearance(BottomNavigationView bottomView, IShellAppearanceElement appearance)
        {
            base.SetAppearance(bottomView, appearance);

            var gradient = new GradientDrawable(
                GradientDrawable.Orientation.RightLeft,
                new int[] {
                    GradientShellPageColorTracker.BottomTabBarTopColor.ToAndroid(),
                    GradientShellPageColorTracker.BottomTabBarBottomColor.ToAndroid()
                });

            bottomView.SetBackground(gradient);
        }

【问题讨论】:

    标签: c# android xamarin xamarin.forms xamarin.android


    【解决方案1】:

    渐变定义代码的问题与调用错误的方法无关,但我错误地将颜色分配给我创建的用于存储 GradientShellPage 的 TopColorBottomColor 属性的颜色跟踪器类因此可以从 AppearanceTracker 访问它们,因为我不知道如何像在实际渲染器中那样访问 Tracker 类的 Element 属性(以获取自定义 GradientShellPage 的实例变量)。

    当然,我的方法失败了,因为我什至没有按照应有的方式使用吸气剂(我急于看到结果)。

    这导致渐变的颜色在运行时为空,但渐变对象本身不是,因此不会引发错误。

    此外,根本不需要外部类,因为我可以简单地将 (GradientShellPage)Element 传递给外观跟踪器的构造函数,并使用那里的颜色。结果如下:

    【讨论】:

      猜你喜欢
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      相关资源
      最近更新 更多