Android TabLayout修改选中字体大小

博客介绍了TabLayout修改选中字体大小的方法。指出style方式只能改整体大小,要修改选中字体大小需用CustomView。核心是设置自定义布局,通过布局拿到id来设置选中字体大小,还给出了github代码链接。

style的方式只能改整体的大小,修改选中字体大小就需要用到CustomView了

效果:

这里写图片描述

核心就是给TabLayout设置自定义布局,通过自定义布局拿到id,然后设置选中时的字体大小

自定义tab布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/tab_item"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:gravity="center"
              android:orientation="vertical">

    <TextView
        android:id="@+id/tab_item_time"
        android:layout_width="wrap_content"
        android:layout_height="24dp"
        android:gravity="bottom"
        android:text="22:00"
        android:textColor="@drawable/selector_text_color"
        android:textSize="12sp"/>

    <TextView
        android:id="@+id/tab_item_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="秒杀中"
        android:textColor="@drawable/selector_text_color"
        android:textSize="12sp"/>

</LinearLayout>

代码引用并设置

 private void initTabView() {
        holder = null;
        for (int i = 0; i < tabs.size(); i++) {
            //获取tab
            TabLayout.Tab tab = mTabLayout.getTabAt(i);
            //给tab设置自定义布局
            tab.setCustomView(R.layout.tab_item);
            holder = new ViewHolder(tab.getCustomView());
            //填充数据
            holder.mTabItemTime.setText(String.valueOf(tabTimes.get(i)));
            holder.mTabItemName.setText(tabs.get(i));
            //默认选择第一项
            if (i == 0) {
                holder.mTabItemTime.setSelected(true);
                holder.mTabItemName.setSelected(true);
                holder.mTabItemTime.setTextSize(18);
                holder.mTabItemName.setTextSize(12);
            }
        }

        mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                holder = new ViewHolder(tab.getCustomView());
                holder.mTabItemTime.setSelected(true);
                holder.mTabItemName.setSelected(true);
                //设置选中后的字体大小
                holder.mTabItemTime.setTextSize(18);
                holder.mTabItemName.setTextSize(12);
                //关联Viewpager
                mViewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
                holder = new ViewHolder(tab.getCustomView());
                holder.mTabItemTime.setSelected(false);
                holder.mTabItemName.setSelected(false);
                //恢复默认字体大小
                holder.mTabItemTime.setTextSize(12);
                holder.mTabItemName.setTextSize(12);
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
            }
        });
    }

    class ViewHolder {
        TextView mTabItemTime;
        TextView mTabItemName;

        ViewHolder(View tabView) {
            mTabItemTime = (TextView) tabView.findViewById(R.id.tab_item_time);
            mTabItemName = (TextView) tabView.findViewById(R.id.tab_item_name);
        }
    }

详见 > github:https://github.com/yechaoa/MaterialDesign 【TabLayoutCustomViewActivity】


### 如何设置 Android TabLayout选中项字体样式 在 Android 开发中,可以通过自定义 `TabLayout` 来实现选中项的字体样式的动态变化。以下是具体方法: #### 方法一:通过 XML 配置默认字体样式 可以在 XML 文件中配置默认的字体大小和风格。例如,在 `styles.xml` 中创建一个名为 `TabLayoutTextSize_two` 的样式[^1]: ```xml <style name="TabLayoutTextSize_two"> <item name="android:textSize">@dimen/font16</item> <item name="android:textStyle">normal</item> </style> ``` 此样式设置了未选中字体大小为 `font16` 并保持正常风格。 #### 方法二:通过自定义 View 实现选中态的变化 为了实现在切换时改变字体大小或加粗的效果,可以使用自定义视图的方式。以下是一个完整的解决方案][^[^23]: ##### 自定义 Tab 布局文件 (`custom_tab_view.xml`) ```xml <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tab_item_textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:typeface="sans"/> ``` ##### 动态设置字体样式逻辑 (Java/Kotlin) 当用户点击某个标签页时,可以根据当前选中的位置更新对应的 TextView 属性。下面是一段 Java 代码示例[^4]: ```java public class MainActivity extends AppCompatActivity { private TabLayout tabLayout; private ViewPager viewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tabLayout = findViewById(R.id.tab_layout); viewPager = findViewById(R.id.view_pager); // 设置适配器并绑定数据 MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(adapter); // 将 TabLayout 和 ViewPager 关联起来 tabLayout.setupWithViewPager(viewPager); // 添加监听事件处理字体样式变更 tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { // 当前选中状态下的操作 setCustomFont(tab, true); } @Override public void onTabUnselected(TabLayout.Tab tab) { // 取消选中状态的操作 setCustomFont(tab, false); } @Override public void onTabReselected(TabLayout.Tab tab) {} }); } /** * 更新指定 Tab 的字体样式 */ private void setCustomFont(TabLayout.Tab tab, boolean isSelected) { View view = tab.getCustomView(); if (view != null && view instanceof TextView) { TextView textView = (TextView) view; if (isSelected) { textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); // 改变文字大小 textView.setTypeface(null, Typeface.BOLD); // 加粗显示 } else { textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14); // 还原文字大小 textView.setTypeface(null, Typeface.NORMAL); // 正常显示 } } } } ``` 上述代码实现了如下功能: - 使用 `setCustomFont()` 函数调整选中与非选中状态下字体的大小以及是否加粗。 - 结合 `addOnTabSelectedListener()` 接口捕获用户的交互行为,并实时修改对应 Tab 的外观特性。 --- ### 总结 以上介绍了两种方式来定制化 `TabLayout` 的字体表现形式——一种是静态设定全局属性;另一种则是借助程序控制机制完成更灵活多样的视觉反馈设计。开发者可根据实际需求选取适合自己的方案加以应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yechaoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值