You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Xamarin Forms Android中修改TabbedPage标题的选中/未选中颜色

实现Xamarin Forms TabbedPage Android端标签标题颜色随选中状态变化

你已经搞定了图标颜色的差异化,要让标题也跟着变颜色其实很简单,只需要在你现有的Android渲染器代码里加几行处理Tab标题TextView的逻辑就行,直接复用你已经定义好的颜色选择器就可以。

修改后的完整渲染器代码

public class MyTabbedPageRenderer: TabbedPageRenderer {
    bool setup;
    ViewPager viewPager;
    TabLayout tabLayout;

    protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) {
        base.OnElementPropertyChanged(sender, e);
        if (setup) return;
        if (e.PropertyName == "Renderer") {
            viewPager = (ViewPager)ViewGroup.GetChildAt(0);
            tabLayout = (TabLayout)ViewGroup.GetChildAt(1);
            setup = true;

            // 复用你已有的颜色选择器,也可以单独新建一个text_tab.xml
            ColorStateList colors = null;
            if ((int)Build.VERSION.SdkInt >= 23) {
                colors = Resources.GetColorStateList(Resource.Color.icon_tab, Forms.Context.Theme);
            } else {
                colors = Resources.GetColorStateList(Resource.Color.icon_tab);
            }

            for (int i = 0; i < tabLayout.TabCount; i++) {
                var tab = tabLayout.GetTabAt(i);
                
                // 处理图标颜色(你原来的逻辑)
                var icon = tab.Icon;
                if (icon != null) {
                    icon = Android.Support.V4.Graphics.Drawable.DrawableCompat.Wrap(icon);
                    Android.Support.V4.Graphics.Drawable.DrawableCompat.SetTintList(icon, colors);
                }

                // 新增:处理标题颜色
                var tabView = tabLayout.GetChildAt(i);
                if (tabView != null) {
                    // 找到Tab里的标题TextView(一般是AppCompatTextView)
                    var titleTextView = tabView.FindViewById<Android.Support.V7.Widget.AppCompatTextView>(Resource.Id.tab_text);
                    if (titleTextView != null) {
                        titleTextView.SetTextColor(colors);
                    }
                }
            }
        }
    }
}

关键说明

  • 复用颜色选择器:我直接用了你已经在Resources/Color/icon_tab.xml里定义的规则,如果标题需要不同的颜色,你可以复制一份改名为text_tab.xml,修改里面的颜色值,然后在代码里换成Resource.Color.text_tab就行。
  • 获取标题TextView:TabLayout的每个Tab对应的View里,标题TextView的默认ID是tab_text(来自Android Support库的TabLayout布局),所以用FindViewById就能定位到它。
  • 版本兼容:颜色选择器的获取逻辑和你原来处理图标的一致,兼顾了Android 6.0(API23)及以上的主题适配。

验证效果

修改完代码后,重新编译运行Android项目,就能看到标签标题和图标一样,选中时显示#2196F3,未选中时显示#b2b2b2,和iOS端的效果保持一致啦。

内容的提问来源于stack exchange,提问作者iamsophia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:28:31