提问者:小点点

更改Shell类“后退”按钮重写文本的字体大小(如果可能,还包括其他字体格式属性)


我有一个ContentPage(这是子类Shell类的内容),当查看时,需要在导航栏中显示带有特定字符串文本的后退按钮。

<ContentPage 
    ....>
  <Shell.NavBarIsVisible>True</Shell.NavBarIsVisible>
    <Shell.BackgroundColor>Black</Shell.BackgroundColor>
    <Shell.BackButtonBehavior>
        <BackButtonBehavior IsEnabled="True" 
                            TextOverride="A" />
    </Shell.BackButtonBehavior>
  
   .....

</ContentPage>

带有所需文本的后退按钮按预期显示在导航栏中,但文本在 Android 平台中并不完全符合所需的字体大小。

像往常一样,我试图通过使用Android平台的自定义shell渲染器来解决这个问题(如下所示),但我无法理解改变后退按钮文本字体大小的方法。

class ShellRenderer
            : ShellRenderer
{
    public ShellRenderer
            (Context context) : base(context) { }

    protected override IShellToolbarAppearanceTracker 
        CreateToolbarAppearanceTracker()
    {
        return new CustomToolbar(this);
    }
    
    public class CustomToolbar 
                  : ShellToolbarAppearanceTracker
    {
        public CustomToolbar
               (IShellContext context) : base(context) 
        { 
        }

        public override void SetAppearance
          (AndroidX.AppCompat.Widget.Toolbar toolbar,
           IShellToolbarTracker toolbarTracker, 
           ShellAppearance appearance)
        {
            base.SetAppearance
                (toolbar, toolbarTracker, appearance);

            // How do you increase the font size of the back button??
            
        }
    }
}

提前谢谢。


共2个答案

匿名用户

在SetAppearance方法中添加断点,您可以看到A显示在工具栏中。导航图标,它不是公共成员,我认为它没有被修改。

匿名用户

在分析了< code>AndroidX的实例后。app compact . widget . toolbar 类作为被覆盖的< code>SetAppearance()方法的参数存在(通过在所述方法中放置断点),可以看出,后退按钮的被覆盖文本的字体大小是通过对象(类型为< code>Android)中存在的名为< code>_defaultSize(其值设置为50)的私有字段设置的。graphics . drawables . drawable )对应于< code>NavigationIcon属性。

由于与字体大小更改相关的字段未声明为公共成员,并且没有帮助器属性/方法,因此必须使用反射将其值设置为所需的字体大小,如下所示:

int requiredFontSize = 100;
toolbar.NavigationIcon.GetType()
   .GetField("_defaultSize", 
             BindingFlags.NonPublic | BindingFlags.Instance)
   .SetValue(toolbar.NavigationIcon, requiredFontSize);