【问题标题】:Editing the NavigationPage back button size in xamarin forms在 xamarin 表单中编辑 NavigationPage 后退按钮大小
【发布时间】:2021-06-03 12:32:28
【问题描述】:

我的目标是增加 NavigationPage 类附带的后退箭头按钮的大小。我发现我们可以改变它的颜色,但不能改变它的大小。是否可以在 xamarin 表单中执行此操作,或者我至少可以在那里使用适合我的 UI 要求的自定义图标。

 <Style TargetType="NavigationPage">
        <Setter Property="BarTextColor" Value="Red" />
        <Setter Property="BarBackgroundColor" Value="Black" />
      
  </Style>

在这里我可以为“BarTextColor”设置颜色,但不能设置它的大小。任何帮助表示赞赏。

【问题讨论】:

    标签: user-interface xamarin


    【解决方案1】:

    NavigationPage 返回按钮是图标,因此您可以使用另一个更大的图标替换此图标。

    对于 Android 平台,如果您的 MainActivity 类型为 FormsAppCompatActivity,您可以自定义 PageRenderer 并更改 Toolbar's NavigationIcon。

    [assembly: ExportRenderer(typeof(ContentPage), typeof(NavigationPageRendererDroid))]
    namespace FormsSample.Droid
    {
    public class NavigationPageRendererDroid : PageRenderer
    {
        public NavigationPageRendererDroid(Context context) : base(context)
        {
    
        }
        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Page> e)
        {
            base.OnElementChanged(e);
    
            var context = (Activity)this.Context;
            var toolbar = context.FindViewById<AndroidX.AppCompat.Widget.Toolbar>(Droid.Resource.Id.toolbar);
    
            toolbar.NavigationIcon = AndroidX.Core.Content.ContextCompat.GetDrawable(context, Resource.Drawable.c1);
            
        }
    }
     }
    

    请注意:Android平台的ToolBar>资源文件夹>布局类型为androidx.appcompat.widget.Toolbar

    如果你的 ToolBar 是其他类型的,你可以看看:

    How to change navigation page back button in xamarin forms

    更新:

    我也重现了和你一样的问题,从我提供的线程中,你可以按照上一个解决方案,自定义一个 NavigationPageRenderer,重写 OnPushAsync 方法来设置 Toolbar 的图标。

    首先,在 .NET Standard 项目中创建一个名为 CustomNavigationPage 的类,该类继承自 NavigationPage 以使我们的自定义渲染器应用于该类。

     public class CustomNavigationPage : NavigationPage
    {
        public CustomNavigationPage(Page startupPage) : base(startupPage)
        {
    
        }
    }
    

    其次,在Android项目中,创建名为NavigationPageRenderer的类,重写OnPushAsync方法。

    [assembly: ExportRenderer(typeof(CustomNavigationPage), typeof(NavigationPageRenderer))]
    namespace FormsSample.Droid
    {
    public class NavigationPageRenderer : Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer
    {     
        public Activity context;
    
        public NavigationPageRenderer(Context context) : base(context)
        {
    
        }
        protected override Task<bool> OnPushAsync(Page view, bool animated)
        {
            var retVal = base.OnPushAsync(view, animated);
    
           var context = (Activity)this.Context;
           var toolbar = context.FindViewById<AndroidX.AppCompat.Widget.Toolbar>(Droid.Resource.Id.toolbar);
    
            if (toolbar != null)
            {
                if (toolbar.NavigationIcon != null)
                {
                    toolbar.NavigationIcon = AndroidX.Core.Content.ContextCompat.GetDrawable(context, Resource.Drawable.c1);
                    toolbar.Title = "back";
                }
            }
    
            return retVal;
        }
    }
    }
    

    最后,在 App.xaml.csfile 中,将 MainPage 设置为 NavigtaionPage,

      MainPage = new CustomNavigationPage(new simplecontrol.Page41());
    

    【讨论】:

    • 感谢您的想法。但是您是否认为有办法将默认/原生后退图标更新为更大的尺寸?我的工具栏是android.support.v7.widget.Toolbar,我使用了您链接中的解决方案。在浏览页面时,默认图标会出现几分之一秒,然后在页面完全加载后消失,当我返回时,它会完全恢复为默认图标。
    • 嗨,关于如何克服上述问题的任何更新?谢谢
    • @Hari 默认/原生后退图标是一张图片,不是文字或其他,如果你把这个图标或图片放大,还是需要替换默认的。关于另一个问题,请查看我的更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    相关资源
    最近更新 更多