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

时间:2020-05-16 03:30:54

标签: c# android xaml xamarin.forms uwp

我已经在Android Studio或UWP中看到了与此Android版本类似的问题,但是我正在为UWP和Android构建Xamarin.Forms应用,我想将汉堡包图标更改为自定义图标做了。这是当前在Android上的外观:

hamburger menu 1

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

enter image description here

在我的主要详细信息页面上有简单的方法吗?我一直在寻找可以在.xaml文件中使用的标记元素,例如:

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

</MasterDetailPage.Master>

还是我必须针对UWP和Android做平台特定的代码,例如自定义渲染器?明确地说,我在问如何更改3条形图标(汉堡图标),但是如果有人也可以包括如何更改操作条背景色,那将是一个好处。

1 个答案:

答案 0 :(得分:0)

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

对于UWP部分,您可以轻松替换hamburg icon。因为在UWP平台中,它是用PaneButton样式的button渲染的,所以您可以找到here。只需将其复制到UWP App.xaml 文件并替换content属性,如下所示。

<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));
                }
            }
        }
    }
}