【问题标题】:Xamarin Forms Android: TabbedPage Font StyleXamarin Forms Android:TabbedPage 字体样式
【发布时间】:2016-12-04 21:19:15
【问题描述】:

如何更改标签标题的样式?最重要的是,标题没有像屏幕截图那样被截断。所以我必须改变标题的大小。 我开始为标签页创建自定义渲染器,但我不知道如何继续。

Xaml:
<custom:CustomTabbedPage...

Forms:
public class CustomTabbedPage : TabbedPage...

Forms.Droid
public class CustomTabbedPageRenderer : TabbedPageRenderer

TabbedPage 具有带有 ContentPages 的 NavigationPages。

如果您需要更多信息,请告诉我。谢谢。

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
        xmlns:local="clr-namespace:TabbedPageWithNavigationPage;assembly=TabbedPageWithNavigationPage"
        x:Class="TabbedPageWithNavigationPage.MainPage">
<NavigationPage Title="Start" Icon="start.png">
    <x:Arguments>
        <local:StartPage />
    </x:Arguments>
</NavigationPage>
<NavigationPage Title="Symptom-Tagebuch" Icon="tagebuch.png">
    <x:Arguments>
        <local:TagebuchPage />
    </x:Arguments>
</NavigationPage>
...

【问题讨论】:

  • 没人?所以所有人都对删减的标题感到满意,没有人改变它。不能相信这一点。 ;)
  • 您能否显示一些代码,您是如何为TabbedPage 创建每个项目的?我用它的ItemTemplate构建了几个ContentPage的源集合,并通过ContentPageTitle属性指定每个项目的标题,它工作正常,标题不被切断,所有样式都是默认的,所以我无法重现您的问题。
  • @GraceFeng-MSFT shure,我从我的项目中添加了一些代码
  • 是否可以将NavigationPage 替换为ContentPage?否则我们可能需要修改NavigationPage的样式。
  • 我想我需要 NavigationPage 因为所有页面都有子页面

标签: c# android xaml xamarin.forms


【解决方案1】:

似乎NavigationPage 的默认标题样式在不同尺寸的设备上表现不同。在我身边的 7" KitKat 模拟器上,它看起来是这样的:

在 5" KitKat 模拟器上看起来是这样的:

或者可能是版本问题导致我身边的这个NavigationPage的行为与你的行为如此不同,我无法重现你的问题。无论如何,如果您想自定义 NavigationPage 的布局,您可以为您的 android 平台创建自定义渲染。更多信息可以参考官方文档Customizing Controls on Each Platform,如果你要找demo,官方论坛有讨论自定义NavigationPage的标题字体你也可以看看:@987654324 @ 和Discussion 2

您的问题的另一个可能的解决方案是,我认为您可以将NavigationPage 更改为ContentPage,并将您的子页面更改为内容视图,通过这样做,您可以参考Xamarin.Forms: Can I embed one ContentPage or ContentView into another ContentPage

根据您的描述,也许第一个通过创建自己的自定义渲染的解决方案更适合您的场景。

【讨论】:

  • 谢谢你,我找到了另一个解决方案,这几天会发布它
  • @Ralf 你发现了什么?谢谢!
【解决方案2】:

在CustomRendered中可以通过TabLayout view children找到title的textview并改变字体样式

[assembly: ExportRenderer(typeof(MainPage), typeof(BottomTabbedPageRenderer))]
namespace Daddy.Droid
{
    public class BottomTabbedPageRenderer : TabbedPageRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
        {
            base.OnElementChanged(e);

            if (e.NewElement == null || e.OldElement != null)
                return;

            TabLayout tablayout = (TabLayout)ViewGroup.GetChildAt(1);
            Android.Views.ViewGroup vgroup = (Android.Views.ViewGroup)tablayout.GetChildAt(0);
            for (int i = 0; i < vgroup.ChildCount; i++)
            {
                Android.Views.ViewGroup vvgroup = (Android.Views.ViewGroup)vgroup.GetChildAt(i);
                Typeface fontFace = Typeface.CreateFromAsset(this.Context.Assets, "IranSans.ttf");
                for (int j = 0; j < vvgroup.ChildCount; j++)
                {
                    Android.Views.View vView = (Android.Views.View)vvgroup.GetChildAt(j);
                    if (vView.GetType() == typeof(Android.Support.V7.Widget.AppCompatTextView) || vView.GetType() == typeof(Android.Widget.TextView))
                    {
                        //here change textview style
                        TextView txtView = (TextView)vView;                        
                        txtView.TextSize = 14f;
                        txtView.SetTypeface(fontFace, TypefaceStyle.Normal);
                    }
                }
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2022-01-18
    相关资源
    最近更新 更多