【问题标题】:How to change Tabbar text size when using TabbedPage.ToolbarPlacement="Bottom" in Xamarin Android?在 Xamarin Android 中使用 TabbedPage.ToolbarPlacement="Bottom" 时如何更改 Tabbar 文本大小?
【发布时间】:2018-10-23 06:16:48
【问题描述】:

我在 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 侧的标签栏文本的大小。我尝试过创建自己的风格,如下所示:

<?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"时如何更改标签栏的文本大小。

【问题讨论】:

标签: xamarin xamarin.forms xamarin.android


【解决方案1】:

我花了一个晚上试图解决同样的问题,但我发现没有一个解决方案有效(添加我自己的样式,我真的不想创建自定义渲染器)。最后,我从 James Montemagno 那里找到了这篇文章:https://montemagno.com/control-text-size-on-android-bottom-navigation/,它拯救了我的夜晚! 我知道这是一个旧帖子,但如果其他人突然出现,它可能会派上用场。

在您的 Android 项目的 Resource/values 中创建一个文件 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>

【讨论】:

    【解决方案2】:

    过去,如果你不使用,

     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) 来改变Text size,What表示设置的格式,可以是前景色,背景色,或者可点击的文字.

    【讨论】:

      猜你喜欢
      • 2021-03-02
      • 2019-02-24
      • 1970-01-01
      • 2016-12-28
      • 2016-01-30
      • 2019-02-19
      • 2014-06-04
      • 2015-05-20
      • 1970-01-01
      相关资源
      最近更新 更多