Как изменить семейство шрифтов панели вкладок при использовании TabbedPage.ToolbarPlacement = “Bottom” в Xamarin Android?

#xml #xaml #xamarin #xamarin.forms #xamarin.android

#xml #xaml #xamarin #xamarin.forms #xamarin.android

Вопрос:

Я использую этот код в NavigationBar.xaml для моей страницы с вкладками

 <TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
        xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
        xmlns:local="clr-namespace:xyz" 
        x:Class="xyz.NavigationBar"
            android:TabbedPage.ToolbarPlacement="Bottom"
        BarBackgroundColor="#000000"
        android:TabbedPage.BarItemColor="#FFFFFF"
        android:TabbedPage.BarSelectedItemColor="Red"
        >
</TabbedPage>
  

Панель инструментов находится внизу.

Я смог изменить размер текста благодаря статье Джеймса Монтеманьо:

https://montemagno.com/control-text-size-on-android-bottom-navigation/

В котором он заявляет, что размер текста можно изменить, добавив dimen.xml файл в Resources/ values со следующим кодом:

 <resources xmlns:tools="http://schemas.android.com/tools">
    <dimen name="design_bottom_navigation_text_size" tools:override="true">12sp</dimen>
    <dimen name="design_bottom_navigation_active_text_size" tools:override="true">12sp</dimen>
</resources>
  

Это работает нормально.
Однако возможно ли изменить семейство шрифтов тем же методом? Я тоже использую пользовательский шрифт.

Заранее спасибо

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

1. Кто-нибудь знает, как это сделать?

Ответ №1:

Создайте новую font папку и добавьте в .tff нее файл и новый XML-файл с именем myfont.

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

в myfont.xml :

 <?xml version="1.0" encoding="utf-8" ?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto">
   <font android:font="@font/a"
      android:fontStyle="normal"
      android:fontWeight="400"
   />
</font-family>
  

затем в ваш Resources/values/styles файл добавьте пользовательский стиль bottomnavigationview.

 <style name="MyBottomNavigationView"
        parent="Widget.Design.BottomNavigationView">
   <item name="fontFamily">@font/myfont</item>
</style>
  

наконец, в вашем пользовательском средстве визуализации tabbedpage:

 [assembly: ExportRenderer(typeof(TabbedPage), typeof(MyTabbedPageRenderer))]
namespace EntryCa.Droid
{
  class MyTabbedPageRenderer:TabbedPageRenderer
  {
      private Context _context;
      public MyTabbedPageRenderer(Context context):base(context)
      {
         _context = context;
      }

      protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
      {
          base.OnElementChanged(e);
          if (e.OldElement == null amp;amp; e.NewElement != null)
          {
              for (int i = 0; i <= this.ViewGroup.ChildCount - 1; i  )
              {
                var childView = this.ViewGroup.GetChildAt(i);
                if (childView is ViewGroup viewGroup)
                {
                    for (int j = 0; j <= viewGroup.ChildCount - 1; j  )
                    {
                        var childRelativeLayoutView = viewGroup.GetChildAt(j);
                        if (childRelativeLayoutView is BottomNavigationView)
                        {
                            ((BottomNavigationView)childRelativeLayoutView).ItemTextAppearanceActive = Resource.Style.MyBottomNavigationView;
                            ((BottomNavigationView)childRelativeLayoutView).ItemTextAppearanceInactive = Resource.Style.MyBottomNavigationView;
                        }
                    }
                }
            }
         }
      }
  }
}