繁体   English   中英

更改汉堡菜单图标 - Xamarin.Forms Android & UWP

[英]Change hamburger menu icon - Xamarin.Forms Android & UWP

我在 Android 工作室或 UWP 中看到了一些与此类似的问题,但我正在构建一个 Xamarin.Forms 应用程序,用于 881956038340988 和 Android 和 Android 这是它目前在 Android 上的样子:

汉堡菜单 1

它在 UWP 上看起来很相似,但这基本上是我想要的:

在此处输入图像描述

在我的主详细信息页面上是否有一种简单的方法可以做到这一点? 我正在寻找一些我可以在 .xaml 文件中使用的标签元素,可能是这样的:

<MasterDetailPage.Master hamburgerIcon="myHamburgerIcon.png">

</MasterDetailPage.Master>

或者我是否必须为 UWP 和 Android 执行特定于平台的代码,例如自定义渲染器? 明确地说,我问的是如何更改 3 个栏的图标(汉堡包图标),但如果有人可以包括如何更改操作栏背景颜色,那将是一个奖励。

更改汉堡菜单图标 - Xamarin.Forms Android & UWP

对于 UWP 部分,您可以轻松替换汉堡图标。 因为在UWP平台是用PaneButton风格的按钮渲染的,可以在这里找到。 只需将其复制到 UWP App.xaml文件并替换内容属性,如下所示。

<Application.Resources>
    <ResourceDictionary>
        <Style x:Key="PaneButton" TargetType="Button">
            <Setter Property="FontFamily" Value="{ThemeResource SymbolThemeFontFamily}" />
            <Setter Property="FontSize" Value="20" />
            <Setter Property="Height" Value="48" />
            <Setter Property="Width" Value="48" />
            <Setter Property="Content" Value="&#xE701;" />
        </Style>
    </ResourceDictionary>
</Application.Resources>

对于 Android 部分,我们需要像下面这样自定义MasterDetailPageRenderer渲染

[assembly: ExportRenderer(typeof(MainPage), typeof(IconNavigationPageRenderer))]
namespace masterDe.Droid
{
    public class IconNavigationPageRenderer : MasterDetailPageRenderer
    {
        public IconNavigationPageRenderer(Context context):base(context) { }
        private static Android.Support.V7.Widget.Toolbar GetToolbar() => (CrossCurrentActivity.Current?.Activity as MainActivity)?.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);



        protected override void OnLayout(bool changed, int l, int t, int r, int b)
        {
            base.OnLayout(changed, l, t, r, b);
            var toolbar = GetToolbar();
            if (toolbar != null)
            {
                for (var i = 0; i < toolbar.ChildCount; i++)
                {
                    var imageButton = toolbar.GetChildAt(i) as Android.Widget.ImageButton;



                    var drawerArrow = imageButton?.Drawable as DrawerArrowDrawable;
                    if (drawerArrow == null)
                        continue;


// replace default hamburg icon
                    imageButton.SetImageDrawable(Forms.Context.GetDrawable(Resource.Drawable.icon));
                }
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM