更改标签的字体,fontFamily无法正常工作

时间:2018-03-27 15:51:38

标签: android xml xamarin.forms tabs

我在我的Xamarin.Forms应用程序(在Android上)为标签定义自定义字体时遇到问题。

Tabbar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.TabLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/sliding_tabs"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:tabTextAppearance="@style/TabbarTitleText"
    app:tabTextColor="@android:color/white"
    app:tabSelectedTextColor="@android:color/white"
    app:tabIndicatorColor="@android:color/white"
    app:tabGravity="fill"
    app:tabMode="fixed" >

  <!--<TextView
      style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
      android:textColor="@android:color/white"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:gravity="center_vertical"
      android:id="@+id/tabbar_title" />-->

</android.support.design.widget.TabLayout>

我试图放一个textview但是没有编译。

我在styles.xml中创建的样式将被应用,但fontFamily属性

除外
<style name="TabbarTitleText" parent="TextAppearance.AppCompat">
    <item name="android:textSize">15dp</item>
    <item name="android:fontFamily">fonts/Futura Book.ttf</item>
    <item name="android:textAllCaps">false</item>
  </style>

所有参数都正确吗?特别是 parent =

如果我使用自定义渲染器,它不起作用,因为在TabLayout中没有要检测的子元素。

对于我的工具栏,它可以正常工作,因为TextView会收到自定义渲染参数。

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"                            
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@android:color/white"
    android:theme="@style/MyActionBar"
    android:background="@drawable/custom_background_bar"
    android:elevation="3dp">

  <TextView
      style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
      android:textColor="@android:color/white"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:gravity="center_vertical"
      android:id="@+id/toolbar_title" />

public class MyToolBarRenderer : NavigationPageRenderer
    {
        public MyToolBarRenderer(Context context) : base(context)
        {
        }

        private Support.Toolbar _toolbar;

        public override void OnViewAdded(Android.Views.View child)
        {
            base.OnViewAdded(child);

            if (child.GetType() == typeof(Support.Toolbar))
                _toolbar = (Support.Toolbar)child;
        }

        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            var page = this.Element as NavigationPage;

            if (page != null && _toolbar != null)
            {
                Typeface tf = Typeface.CreateFromAsset(Android.App.Application.Context.Assets, "fonts/Futura Book.ttf");

                TextView title = (TextView)_toolbar.FindViewById(Resource.Id.toolbar_title);
                title.SetText(page.CurrentPage.Title, TextView.BufferType.Normal);
                title.SetTypeface(tf, TypefaceStyle.Normal);
            }

        }

    }

我的所有观点都是NavigationPages,而不是任何TabbedPage。

在App.xaml.cs中我有这个

 MainPage = new NavigationPage(new MainPage())

然后在MainPage

switch (Device.RuntimePlatform)
            {
                case Device.iOS:
                    centerPage = new NavigationPage(new Center_Main())
                    {
                        Title = TitleCenter
                    };
                     ......
                    break;

                default:
                    centerPage = new Center_Main()
                    {
                        Title = TitleCenter
                    };

                    rightPage = new Right_Main()
                    {
                        Title = TitleRight
                    };

                    .......
                    break;
            }

然后每个xaml都是一个ContentPage。我基本上在开始时创建了一个Master Detail项目。

0 个答案:

没有答案