特定的ContentPage标题在android上的字体大小

时间:2018-04-15 16:39:05

标签: android xaml xamarin xamarin.forms

所以我创建了一个导航栏,我想在其中为Android上的用户缩小标题字体。

我认为我可以这样做:

<ContentPage.Title>
    <OnPlatform x:TypeArguments="Size">
        <On Platform="Android">8</On>
    </OnPlatform>
</ContentPage.Title>

但它不起作用,我收到编译器错误。

因此,我如何更正我的代码,或者最好在App.xaml中编写一些可重用的代码,以便为我的导航标题声明特定于平台的字体大小。

1 个答案:

答案 0 :(得分:0)

您需要使用自定义渲染器来设置字体大小 例如:
在pcl项目中创建一个MyNavigationPage.cs

public class MyNavigationPage : NavigationPage
{
    public MyNavigationPage(Page root) : base(root)
    {

    }
}

在android项目中创建渲染器类:

[assembly: ExportRenderer(typeof(MyNavigationPage), typeof(CustomNavigationPageRenderer))]    
namespace NavigationBarFontSize.Droid
{
    public class CustomNavigationPageRenderer : NavigationPageRenderer
    {
        public CustomNavigationPageRenderer(Context context) : base(context)
        {

        }

        private Android.Support.V7.Widget.Toolbar toolbar;

        public override void OnViewAdded(Android.Views.View child)
        {
            base.OnViewAdded(child);
            if (child.GetType() == typeof(Android.Support.V7.Widget.Toolbar))
            {
                toolbar = child as Android.Support.V7.Widget.Toolbar;
                toolbar.ChildViewAdded += Toolbar_ChildViewAdded;
                var a = toolbar.ChildCount;
            }
        }

        void Toolbar_ChildViewAdded(object sender, ChildViewAddedEventArgs e)
        {
            var view = e.Child.GetType();
            if (e.Child.GetType() == typeof(Android.Support.V7.Widget.AppCompatTextView))
            {
                var textView = e.Child as Android.Support.V7.Widget.AppCompatTextView;
                textView.TextSize = 50;
                toolbar.ChildViewAdded -= Toolbar_ChildViewAdded;
            }
        }
    }
}

最后,您可以通过以下方式使用它:

        public App ()
        {
            InitializeComponent();    
            MainPage = new MyNavigationPage(new MainPage());
        }