【问题标题】:How change icon for MasterDetail on Android?如何在 Android 上更改 MasterDetail 的图标?
【发布时间】:2021-07-17 23:01:12
【问题描述】:

我有 Xamarin 表单。我需要更改MasterDetailPage 的标准图标。属性图标不适用于 Android。我尝试添加自定义渲染器,但它不起作用。

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

GetToolbar() 始终为空。我该如何解决?

【问题讨论】:

  • 我认为您不需要自定义渲染器,您是否尝试在母版页上添加类似 IconImageSource="hamburger.png" 的内容?阅读here 了解它。

标签: c# android xamarin.forms custom-renderer


【解决方案1】:

我根据您的代码在我这边进行了测试,但它在我这边可以正常工作。

您可以重新检查您是否在android平台上正确安装并设置了nuget Plugin.CurrentActivity

并在OnCreate上调用Init方法:

CrossCurrentActivity.Current.Init(this, bundle);

有关更多信息,请查看:https://github.com/jamesmontemagno/CurrentActivityPlugin

另外可以查看Toolbar.axml文件夹layout中是否有布局layout,代码如下:

   <android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

结果是:

注意:你可以参考这个帖子:Change hamburger icon in master detail navigation xamarin forms

【讨论】:

  • 嗨@FetFrumos,我已经有几天没有收到你的消息了。如果有什么我可以在这里提供帮助的,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 2021-02-03
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
相关资源
最近更新 更多