在Xamarin Android中使用TabbedPage.ToolbarPlacement =“ Bottom”时如何更改Tabbar文本大小?

时间:2018-10-23 06:16:49

标签: xamarin xamarin.forms xamarin.android

我在Xamarin表单中有以下代码:

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
            xmlns:local="clr-namespace:XXX;assembly=XXX"
            xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
            BackgroundColor="{DynamicResource BarBackgroundColor}"
            android:TabbedPage.ToolbarPlacement="Bottom"
            android:TabbedPage.BarItemColor="Gray"
            android:TabbedPage.BarSelectedItemColor="{DynamicResource BarSelectedItemColor}"
            android:TabbedPage.IsSwipePagingEnabled="False"
            x:Class="XXX.MainPage">
</TabbedPage>

我想在Android边更改Tabbar文本的大小。我尝试过创建自己的样式,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyTabLayoutStyle" parent="TextAppearance.Design.Tab">
        <item name="android:textSize">5sp</item>
    </style>
</resources>

在我的Tabbar.axml中:

<?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/tabs"
    android:layout_width="match_parent"
    app:tabGravity="fill" 
    app:tabMode="fixed"
    app:tabTextAppearance="@style/MyTabLayoutStyle"/>

我感觉这是行不通的,因为我正在使用TabbedPage.ToolbarPlacement="Bottom",而不是TabLayout,现在我正在使用BottomNavigationView。因此,上面的问题是,在使用TabbedPage.ToolbarPlacement="Bottom"时如何更改标签栏的文本大小。

2 个答案:

答案 0 :(得分:1)

过去,如果您不使用,

 xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
android:TabbedPage.BarItemColor="#999999"
android:TabbedPage.BarSelectedItemColor="Black"
android:TabbedPage.ToolbarPlacement="Bottom"

您可以看一下以下线程来更改TabbedPage栏的文本大小。但是,如果您使用TabbedPage.ToolbarPlacement =“ Bottom”,则无法使用。因此,您需要看一下TabbedPage源代码。 Xamarin.Forms: Change Icon & Text size in TabbedPage tabs

从GitHub的TabbedPage源代码中,我们可以看到有放置Tab的位置,一个是Bottom,另一个不是,您想将Tab放在底部,因此可以看一下这部分代码。 https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs

在Relativelayout上添加两个视图,BottomNavigation视图是第二个视图。

创建CustomTabbedPageRenderers类:

 class CustomTabbedPageRenderers: TabbedPageRenderer
{

    public CustomTabbedPageRenderers(Context context) : base(context)
    {
    }
    private AWidget.RelativeLayout _relativeLayout = null;       
    protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
    {
        base.OnElementChanged(e);

        _relativeLayout = (AWidget.RelativeLayout)this.GetChildAt(0);           
        changeTabsFont();

    }
    private void changeTabsFont()
    {
        //Typeface font = Typeface.CreateFromAsset(Android.App.Application.Context.Assets, "fonts/" + Constants.FontStyle);
        BottomNavigationView bottomnavigationview = (BottomNavigationView)_relativeLayout.GetChildAt(1);
        int menucount = bottomnavigationview.Menu.Size();

        for(int j=0;j<menucount;j++)
        {
            IMenuItem tab = bottomnavigationview.Menu.GetItem(j);
            SpannableString spanString = new SpannableString(tab.TitleFormatted.ToString());
            int end = spanString.Length();
            spanString.SetSpan(new RelativeSizeSpan(1.5f), 0, end, SpanTypes.ExclusiveExclusive);
            tab.SetTitle(spanString);

        }

    }

}

您可以使用SpannableString.SetSpan(对象what,int开头,int结束,int标志)更改文本大小,该值表示设置的格式,可以是前景色,背景色或可单击的文本

答案 1 :(得分:0)

我整夜都在努力解决相同的问题,但我发现所有解决方案都没有用(添加我自己的样式,我真的不想创建自定义渲染器)。最终,我看了James Montemagno的这篇文章:https://montemagno.com/control-text-size-on-android-bottom-navigation/挽救了我的夜晚! 我知道这是一篇过时的文章,但是如果有人弹出,可能会派上用场。

在Android项目中的资源/值中创建文件dimens.xml(如果在您的项目中尚不存在)。然后将其添加到您的文件中:

<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>