更改 Shell 类的后退按钮的覆盖文本的字体大小(以及,如果可能,其他字体格式属性)

Posted

技术标签:

【中文标题】更改 Shell 类的后退按钮的覆盖文本的字体大小(以及,如果可能,其他字体格式属性)【英文标题】:Altering the font size (and, if possible, other font formatting attributes) of the Shell class' back button's overridden text 【发布时间】:2021-02-23 18:08:22 【问题描述】:

我有一个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??
            
        
    

提前致谢。

【问题讨论】:

【参考方案1】:

在SetAppearance方法中添加断点,可以看到A在toolbar.NavigationIcon中显示,它不是public成员,我认为它没有被修改。

【讨论】:

【参考方案2】:

通过分析作为被覆盖的SetAppearance() 方法的参数存在的AndroidX.AppCompact.Widget.Toolbar 类的实例(通过在所述方法中放置断点),可以看出后退按钮的被覆盖文本的字体大小为通过与NavigationIcon 属性对应的对象(Android.Graphics.Drawables.Drawable 类型)中存在的名为 _defaultSize(其值设置为 50)的私有字段进行设置。

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

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

【讨论】:

很高兴听到您解决了您的问题,您可以将您的回复标记为答案,它可能对其他人有所帮助。

以上是关于更改 Shell 类的后退按钮的覆盖文本的字体大小(以及,如果可能,其他字体格式属性)的主要内容,如果未能解决你的问题,请参考以下文章

在uinavigationcontroller上更改后退按钮的字体

更改单选按钮旁边的字体大小

如何更改导航栏中按钮文本的字体大小?

带有自定义后退按钮字体的错误大标题动画

更改后退导航栏按钮的字体

iPhone 的啥代码,以便用户可以通过单击某些按钮来更改文本视图中的字体大小?