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

问题描述 投票:2回答:1

我在Xamarin Forms中有以下代码:

<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"时更改tabbar的文本大小。

xamarin xamarin.forms xamarin.android
1个回答
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上添加两个视图,BottomNavigationview是第二个。

创建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(Object what,int start,int end,int flags)来更改文本大小,What表示设置的格式,可以是前景色,背景色或可点击文本。

© www.soinside.com 2019 - 2024. All rights reserved.