NavtigationPage的自定义渲染器导致“ requestLayout()调用不正确”]]

问题描述 投票:0回答:1

我为NavigationPage编写了一个自定义渲染器,以便使用我自己的图标重置汉堡包/菜单图标。我将设计的图标放置在所有mdpi,hdpi等文件夹中。在构建应用程序时,实际上会选择一个相当大的图标Versin,因此需要调用requestLayout()

关于避免此主题的任何建议,因为它会导致一些性能问题。

这是我的自定义渲染器:

public class IconNavigationPageRenderer : NavigationPageRenderer
{
    public IconNavigationPageRenderer(Context context) : base(context)
    {

    }

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

                imageButton?.SetMaxHeight(toolbar.Height);
                Android.Graphics.Drawables.Drawable dr = Context.GetDrawable(Resource.Drawable.Icon_black);
                if (imageButton?.Drawable.GetHashCode() == dr.GetHashCode())
                    continue;

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

                imageButton.SetImageDrawable(dr);
            }
        }
    }
}

我为NavigationPage编写了一个自定义渲染器,以便使用我自己的图标重置汉堡包/菜单图标。我将设计的图标放置在所有mdpi,hdpi等文件夹中。在构建应用程序时,...

xamarin.forms xamarin.android custom-renderer
1个回答
0
投票

我认为您需要的是TitleView

© www.soinside.com 2019 - 2024. All rights reserved.