【问题标题】:Xamarin Forms - Android - Change Up/Back Arrow colour per content pageXamarin Forms - Android - 更改每个内容页面的向上/后退箭头颜色
【发布时间】:2018-08-03 01:32:47
【问题描述】:

我已经为此苦苦挣扎了几天,我尝试了很多关于 SO 的文章,但似乎没有一个符合我的要求,我设置了 Toolbar.xml 并将主题设置如下

<style name="ToolbarStyle" parent="Theme.AppCompat.Light">
    <!-- Customize color of navigation drawer icon and back arrow -->
    <item name="colorControlNormal">@color/white</item>
  </style>

这适用于每个应用程序,但我需要根据我所在的内容页面在白色和黑色箭头之间交替,我也尝试过自定义渲染器,但这也不能动态工作

任何指针都非常感谢,即使我可以澄清,Xamarin 表单导航是工具栏还是操作栏?

干杯 安东尼

【问题讨论】:

  • 对不同的内容页面使用 different-2 自定义主题。
  • 嗨,我想过这个,但我不确定如何在每个 xamarin 内容页面的 Android 工具栏上动态更改主题?

标签: android xamarin xamarin.forms xamarin.android


【解决方案1】:

Xamarin 表单导航是 Toolbar 还是 ActionBar?

它是一个工具栏而不是一个动作栏

Android.Support.V7.Widget.Toolbar

您可以通过 ToolBar.NavigationIcon.SetColorFilter(...) 设置颜色,但您必须先找到它,因为 Xamarin 没有通过 SetSupportActionBar... 应用它。

红色后退按钮PlatformEffect 示例:

public class RedBackButtonColorNameEffect : PlatformEffect
{
    protected override void OnAttached()
    {
        void ViewGroups(ViewGroup viewGroup)
        {
            for (int i = 0; i < viewGroup.ChildCount; i++)
            {
                Android.Views.View v = viewGroup.GetChildAt(i);
                switch (v)
                {
                    case Toolbar tb:
                        tb.NavigationIcon?.SetColorFilter(viewGroup.Resources.GetColor(Android.Resource.Color.HoloRedDark), PorterDuff.Mode.SrcAtop);
                        return;
                    case ViewGroup vg:
                        ViewGroups(vg);
                        break;
                }
            }
        }
        var rootView = (Control.Context as AppCompatActivity).FindViewById(Android.Resource.Id.Content).RootView as ViewGroup;
        ViewGroups(rootView);
    }


    protected override void OnDetached()
    {
    }
}

用法:

someControl.Effects.Add(Effect.Resolve("Effects.RedBackButtonColorNameEffect"));

(记得设置你的ResolutionGroupName & ExportEffect 属性...)

注意:如果您在页面级别或容器级别附加效果,Xamarin 不会在 PlatformEffect 中应用 Control 实例的值,因此这将不起作用。您可以将 Activity 上下文存储在 MainActivity 的某处(静态变量),以解决该问题,因此您可以选择正确的 Context 在其中搜索..

注意!:PlatformEffects 在很多方面都很糟糕,尤其是因为它们从不收集车库,因此存在内存泄漏,它们非常适合快速示例/原型,但使用自定义渲染器用于生产代码)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2021-02-24
    • 2017-07-09
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多