#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. рад слышать, что вы решили свою проблему, вы можете пометить свой ответ как ответ, возможно, это поможет другим.