Хобрук: Ваш путь к мастерству в программировании

Изменение размера шрифта (и, если возможно, других атрибутов форматирования шрифта) переопределенного текста кнопки «Назад» класса 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 (как показано ниже), но я не могу понять, как изменить размер шрифта текста кнопки «Назад».

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

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

24.02.2021

2

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

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

int requiredFontSize = 100;
toolbar.NavigationIcon.GetType()
   .GetField("_defaultSize", 
             BindingFlags.NonPublic | BindingFlags.Instance)
   .SetValue(toolbar.NavigationIcon, requiredFontSize); 
24.02.2021
  • рад слышать, что вы решили свою проблему, вы можете пометить свой ответ как ответ, возможно, это поможет другим. 25.02.2021
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..