Изменение размера шрифта (и, если возможно, других атрибутов форматирования шрифта) переопределенного текста кнопки возврата класса оболочки

#c# #android #xamarin #xamarin.forms #xamarin.android

#c# #Android #xamarin #xamarin.forms #xamarin.android

Вопрос:

У меня есть ContentPage (то есть содержимое подкласса Shell class), для просмотра которого на панели навигации должна присутствовать кнопка «Назад» с определенным строковым текстом.

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

</ContentPage>
 

Кнопка «Назад» с требуемым текстом отображается, как и ожидалось, на панели навигации, но текст не совсем соответствует требуемому размеру шрифта на платформе Android.

Как всегда с такими проблемами, я попытался решить проблему с помощью пользовательского средства визуализации оболочки для платформы Android (как показано ниже), но я не могу понять, как изменить размер шрифта текста кнопки возврата.

 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, и вы можете увидеть отображение в toolbar.NavigationIcon, это не общедоступный элемент, я думаю, он не изменен.

введите описание изображения здесь

Ответ №2:

После анализа экземпляра AndroidX.AppCompact.Widget.Toolbar класса, присутствующего в качестве аргумента переопределенного SetAppearance() метода (путем установки точки останова в указанном методе), можно увидеть, что размер шрифта переопределенного текста кнопки возврата задается с помощью закрытого поля named _defaultSize (со значением 50), присутствующего в объекте(типа Android.Graphics.Drawables.Drawable ), соответствующего NavigationIcon атрибуту.

Поскольку поле, касающееся изменения размера шрифта, не объявлено как общедоступный элемент и не имеет вспомогательных свойств / методов, необходимо использовать отражение, чтобы установить его значение на требуемый размер шрифта следующим образом:

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

Комментарии:

1. рад слышать, что вы решили свою проблему, вы можете пометить свой ответ как ответ, возможно, это поможет другим.