TabLayout选中更改标签字体大小及颜色

Android 开发 Tip 11 -- TabLayout 设置文字大小一致 转载请注明出处:http://blog.youkuaiyun.com/crazy1235/article/details/71425135 使用TabLayout的时候,有些tab的文字比较多时,会出现与其他tab的文字大小不一致的情况! TabLayout 继承自 HorizontalScrollView内部有几个关键的类: SlidingTabStrip – TabLayout的唯一子View Tab 阅读详情

由于最近要使用TabLayout加载顶部导航栏,但是产品需求是将我们选中的标签变大,上网找了一下,发现TabLayout中除了XML中可以设置字体大小之外,其他没有啥API能更改

字体大小,,

这个是在XML中设置字体大小,但是我们想要的是在代码中设置,所以,我在网上查找资料的时候,发现了可以自定义TabLayout上的标签,也就是说,可以设置图片加文字,或者仅文字,接下来就开始粘代码:

首先用TabLayout用的依赖:

compile 'com.android.support:design:27.0.1'

 

XML中的代码:

 

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

        <android.support.design.widget.TabLayout
            android:id="@+id/tab_id"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:isScrollContainer="true"
            app:tabBackground="@android:color/white"
            app:tabContentStart="0dp"
            app:tabGravity="center"
            app:tabIndicatorHeight="0dp"
            app:tabMaxWidth="@dimen/dp_200"
            app:tabMode="scrollable"
            app:tabSelectedTextColor="@color/color_f9050d"
            app:tabTextColor="@color/color_FF000000">

        </android.support.design.widget.TabLayout>

    <android.support.v4.view.ViewPager
        android:layout_below="@id/view_horizontal"
        android:id="@+id/No_scroll"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v4.view.ViewPager>

</RelativeLayout>

 

 

我们自定义标签的布局XML:这里面就写了一个TextView

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tv_tab"
        android:text="sss"
        android:textColor="@drawable/tab_textattr"
        android:layout_gravity="center"
        android:textSize="@dimen/sp_17"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

这是主方法中的代码:

public class ChoiceFragment extends Fragment {

    @BindView(R.id.tab_id)
    TabLayout tabId;
    @BindView(R.id.No_scroll)
    ViewPager noScroll;
    Unbinder unbinder;
    private View view;
    //添加数据
    private List<DataBean> mStrings;

    //添加Fragment
    private List<Fragment> mFragments;

    //设置title和Fragment的适配器
    private TabFragmentAdapter mTabFragmentAdapter;

    //自定义视图的全局变量
    private TextView tv_tab;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_choice, null);
        unbinder = ButterKnife.bind(this, view);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //定义保存的顶部数据和Fragment
        mStrings = new ArrayList<>();
        mFragments = new ArrayList<>();

        //设置初始化数据
        initSet();
        //设置Fragment
        initEvent();
        //设置点击
        initClick();
    }

    /**
     * 设置tableLayout的点击监听事件
     */
    private void initClick() {

        tabId.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                //定义方法,判断是否选中
                updateTabView(tab, true);
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
                //定义方法,判断是否选中
                updateTabView(tab, false);
            }

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

    /**
     *  用来改变tabLayout选中后的字体大小及颜色
     * @param tab
     * @param isSelect
     */
    private void updateTabView(TabLayout.Tab tab, boolean isSelect) {
        //找到自定义视图的控件ID
        tv_tab = (TextView) tab.getCustomView().findViewById(R.id.tv_tab);
        if(isSelect) {
            //设置标签选中
            tv_tab.setSelected(true);
            //选中后字体变大
            tv_tab.setTextSize(TypedValue.COMPLEX_UNIT_PX,ResourcesUtils.getResource().getDimensionPixelSize(R.dimen.sp_28));

        }else{
            //设置标签取消选中
            tv_tab.setSelected(false);
            //恢复为默认字体大小
            tv_tab.setTextSize(TypedValue.COMPLEX_UNIT_PX,ResourcesUtils.getResource().getDimensionPixelSize(R.dimen.sp_17));

        }
    }

    /**
     * 设置顶部标签数据
     */
    private void initSet() {
        //判断当前集合是否为空
//        if(mStrings.size()!=0||!mStrings.isEmpty()){
//            mStrings.clear();
//        }
        //添加数据(数据你自己随便填几个就行~)
        mStrings.add(new DataBean(ResourcesUtils.getString(R.string.title_recommend), ResourcesUtils.getString(R.string.title_recommend_ztid), ResourcesUtils.getString(R.string.title_social_type)));
        mStrings.add(new DataBean(ResourcesUtils.getString(R.string.title_social), ResourcesUtils.getString(R.string.title_social_ztid), ResourcesUtils.getString(R.string.title_social_type)));
        mStrings.add(new DataBean(ResourcesUtils.getString(R.string.title_video), ResourcesUtils.getString(R.string.title_video_ztid), ResourcesUtils.getString(R.string.title_video_type)));
        mStrings.add(new DataBean(ResourcesUtils.getString(R.string.title_talking), ResourcesUtils.getString(R.string.title_talking_ztid), ResourcesUtils.getString(R.string.title_talking_type)));
        mStrings.add(new DataBean(ResourcesUtils.getString(R.string.title_life), ResourcesUtils.getString(R.string.title_life_ztid), ResourcesUtils.getString(R.string.title_life_type)));
        mStrings.add(new DataBean(ResourcesUtils.getString(R.string.title_story), ResourcesUtils.getString(R.string.title_story_ztid), ResourcesUtils.getString(R.string.title_story_type)));
        mStrings.add(new DataBean(ResourcesUtils.getString(R.string.title_phone), ResourcesUtils.getString(R.string.title_phone_ztid), ResourcesUtils.getString(R.string.title_phone_type)));
        mStrings.add(new DataBean(ResourcesUtils.getString(R.string.title_rumour), ResourcesUtils.getString(R.string.title_rumour_ztid), ResourcesUtils.getString(R.string.title_rumour_type)));
        //设置数据
        setTitlte(mStrings);
    }

    /**
     * 销毁页面
     */
    @Override
    public void onDestroyView() {
        super.onDestroyView();
        unbinder.unbind();
    }

    /**
     * 设置顶部数据
     * @param list
     */
    private void setTitlte(List<DataBean> list) {
        //循环结合数据,判断不同标签加载不同的布局
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getType().equals("2")) {
                //加载不同的Fragment
                DifferentFragment differentFragment = new DifferentFragment();
                differentFragment.setDifferentFragment(list.get(i).getZtid());
                mFragments.add(differentFragment);
            } else {
                //加载相同的Fragment
                ChildFragment childFragment = new ChildFragment();
                childFragment.setChildFragment(list.get(i).getZtid());
                mFragments.add(childFragment);
            }
        }
        //实例化适配器
        mTabFragmentAdapter = new TabFragmentAdapter(getFragmentManager());
        //设置加载的Fragment集合
        mTabFragmentAdapter.setFragments(mFragments);
    }

    /**
     * 设置Viewpager的适配器
     */
    private void initEvent() {
        //设置Viewpager的适配器
        noScroll.setAdapter(mTabFragmentAdapter);
        tabId.setupWithViewPager(noScroll);//TabLayout绑定ViewPager
        tabId.setTabsFromPagerAdapter(mTabFragmentAdapter);//TabLayout的标签从Adapter中获取
        //用来循环适配器中的视图总数
        for (int i = 0; i < mTabFragmentAdapter.getCount(); i++) {
            //获取每一个tab对象
            TabLayout.Tab tabAt = tabId.getTabAt(i);
            //将每一个条目设置我们自定义的视图
            tabAt.setCustomView(R.layout.tablayout_item);
            //默认选中第一个
            if (i == 0) {
                // 设置第一个tab的TextView是被选择的样式
                tabAt.getCustomView().findViewById(R.id.tv_tab).setSelected(true);//第一个tab被选中
                //设置选中标签的文字大小
                ((TextView) tabAt.getCustomView().findViewById(R.id.tv_tab)).setTextSize(TypedValue.COMPLEX_UNIT_PX, ResourcesUtils.getResource().getDimensionPixelSize(R.dimen.sp_28));
            }
            //通过tab对象找到自定义视图的ID
            TextView textView = (TextView) tabAt.getCustomView().findViewById(R.id.tv_tab);
            textView.setText(mStrings.get(i).getTitle());//设置tab上的文字
        }
    }
}

这是适配器的代码:

public class TabFragmentAdapter extends FragmentStatePagerAdapter {

    private List<Fragment> mBaseFragments;

    public TabFragmentAdapter(FragmentManager fm) {
        super(fm);
        this.mBaseFragments=new ArrayList<>();
    }

    public void setFragments(List<Fragment> fragments) {
        if (fragments != null) {
            mBaseFragments.addAll(fragments);
            notifyDataSetChanged();
        }
    }

    @Override
    public Fragment getItem(int position) {
        return mBaseFragments.get(position);
    }

    @Override
    public int getCount() {
        return mBaseFragments.size();
    }
}

我自己的一个工具类,ResoursesUtils:记得写完再Application中初始化一下,ResoursesUtils.init();

public class ResourcesUtils {
    private static Context context;

    private ResourcesUtils() {
        throw new UnsupportedOperationException("u can't instantiate me...");
    }

    /**
     * 初始化工具类
     *
     * @param context 上下文
     */
    public static void init(Context context) {
        ResourcesUtils.context = context.getApplicationContext();
    }

    /**
     * 获取ApplicationContext
     *
     * @return ApplicationContext
     */
    public static Context getContext() {
        if (context != null) return context;
        throw new NullPointerException("u should init first");
    }

    /**
     * 得到resources对象
     *
     * @return
     */
    public static Resources getResource() {
        return getContext().getResources();
    }

    /**
     * 得到string.xml中的字符串
     *
     * @param resId
     * @return
     */
    public static String getString(int resId) {
        return getResource().getString(resId);
    }
}

效果就是这样~:

MFC控件CTabCtrl的重绘,支持背景颜色、tab头字体颜色、背景色的修改 由于CTabCtrl控件的tab切换当前选中tab很不明显,所以参考官方文档自己写了一个派生类,实现了背景颜色的调整,重绘,突出显示当前选中tab,应用灵活。 立即下载

相关推荐

简单的tabLayout 使用,带有文字放大效果和分割线

简单的tabLayout 使用,带有 文字 放大效果 和 分割线 , 滑动切换 和点击切换

Android 设置TabLayout选中后的字体、大小、颜色等设置

对TabLayout选中和为选中状态下,文字样式设置

mojo001的博客 1万+

STC8H硬件IIC从机模式实战:手把手教你驱动OLED屏幕(附完整代码)

本文详细介绍了如何使用STC8H单片机的硬件IIC从机模式驱动SSD1306 OLED屏幕,包括硬件连接、寄存器配置、中断处理和实际应用中的优化技巧。通过完整的代码示例和实战经验分享,帮助开发者快速掌握I2C通信协议和OLED屏幕驱动技术,提升嵌入式开发效率。

weixin_33747129的博客 336

Android TabLayout设置字体大小的正确方式

1、在styles.xml中自定义TabLayoutTextStyle &lt;style name="TabLayoutTextStyle"&gt; &lt;item name="android:textSize"&gt;@dimen/tab_layout_text_size&lt;/item&gt; &lt;/style&gt; 2、textSize不要直接写固定的x...

ITPlus的博客 3475

AutoCAD提示找不到acdb24.dll、AcGe24.dll、AcPal.dll、AcUt.dll怎么办?

在我们安装了AutoCAD 2023版本以后,打开CAD,可能会出现dll文件丢失的情况,如下所示:1、由于找不到acdb24.dll,无法继续执行代码。重新安装程序可能解决此问题。2、由于找不到AcGe24.dll,无法继续执行代码。重新安装程序可能解决此问题。3、由于找不到AcPal.dll,无法继续执行代码。重新安装程序可能解决此问题。4、由于找不到AcUt.dll,无法继续执行代码。重新安装程序可能解决此问题。遇到AutoCAD启动系统错误,由于找不到dll文件该怎么处理呢?

huoxu369的博客 1万+

Dell R730安装Windows Server 2008 R2

一、RAID驱动准备  在安装Windows server2008 R2操作系统时,如果没有发现硬盘,请将下面的阵列卡驱动先解压(在下载的.exe文件,双击点下一步会自动解压),解压后把那文件夹复制到U盘中。阵列卡 PERC9 H330 - H730 - H730P - H830 Controllers for Windows Server 2008 R2二、系统安装方法方法一:光盘安装  ①请您...

MarshLin 2万+

Design库-TabLayout属性详解

1.什么是TabLayout 在源码中给出了TabLayout的定义: TabLayout provides a horizontal layout to display tabs. 意思很明显:TabLayout提供了一个水平的布局用来展示Tabs。 Design库:AS有直接的引用,如果是Eclipse这里提供一个通道-Design库 特别说明: Caused by:

哎呀小嘿的博客 1677

2025华东杯A/B/C题解题思路+可运行代码参考

这些因素包括但不限于:助滑坡的坡度、运动员的质量、滑雪板的接触面与雪地的摩擦力、空气阻力系数、运动员的体型和衣物形态等。助滑坡是运动员滑行至起跳台前的最后一段坡道,这一段坡道的坡度、长度和运动员的姿势会直接影响到起跳时的初始速度。运动员的滑行速度不仅受助滑坡的坡度影响,还受到摩擦力、空气阻力和重力等多方面因素的影响。通过合理的姿势调整,运动员能够有效减少空气阻力,增加身体的重力加速度,进而提升滑行速度。助滑坡的角度通常介于10°到12°之间,而运动员的滑行速度将受到重力、摩擦力和空气阻力的共同作用。

qq_52590045的博客 1797

每天记录学习的新知识 : TabLayout的简单运用

简介 所在包:android.support.design.widget 继承类:android.widget.HorizontalScrollView 背景:北京时间2015.5.29谷歌I/O开发者大会,带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的Android Design Support Library,在这个support库里面,Google给我们提...

嗯... 406

STM32CubeMX Nucleo F767ZI 教程(1)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 官网上买了个NUCLEO F767ZI 的开发板,144引脚的芯片,https://www.st.com/content/st_com/zh/products/evaluation-tools/prod

fafuwxm 2029

电赛综合测评题练习(一)-(与2013年电赛综合测评要求类似)

电赛综合测评题练习 文章目录电赛综合测评题练习前言1. 波形发生器1.1 题目说明1.1.1 可用器件1.1.2 设计要求1.1.3 设计方案论证1.2 仿真电路设计1.2.1 脉冲波发生器电路1.2.1.1 方案介绍1.2.1.2 理论分析与计算1.2.1.3 电路系统设计1.2.1.4 仿真方案与仿真测试结果1.2.2 锯齿波电路1.2.2.1 理论分析与计算1.2.2.2 电路系统设计1.2.2.3 仿真方案与仿真测试结果1.2.3 正弦波I电路1.2.3.1 理论分析与计算1.2.3.2 电路系

daydayup!的博客 3万+

Tablayout + ViewPager2 + Fragment + AppbarLayout 使用总结 (一)

###Tablayout #####1、效果图 #####2、属性介绍 <com.google.android.material.tabs.TabLayout android:id="@+id/tablayout" android:layout_width="match_parent" android:layout_height="40dp" android:background="#FFFFFFFF" app:tabM

七七七七七七七的博客 1068

拯救我的老平板三星note8.0 table(GT-N5110)升级到lineage os-14.1(android7.1)全记录

买了多年的三星平板note8.0已经闲置了一段时间,今天在家不能出门,也没啥事,就把它拿出来刷新系统。不成想居然搞了一天,还差点变成了砖。 原版的系统是安卓4.0的系统,很多软件已经不能用了,微信、优酷都不支持,而且三星也不提供更新升级,于是寻求第三方解决方案。折腾过程一波三折,就不赘述了,我就讲一下正确的操作过程吧。 切记我这里讲的过程只针对三星note8.0 table,国行版本,版本号是...

weixin_41108814的博客 2万+

andriod实战项目开发五----TabLayout自定义,完美解决选中标题后可以设置颜色和字体的大小

andriod实战项目开发五----TabLayout自定义,完美解决选中标题后可以设置颜色和字体的大小

sccd2009的专栏 3266

从零实现深度学习框架【实现自己的PyTorch(已完结)】

本着“凡我不能创造的,我就不能理解”的思想,此系列文章会基于纯Python以及NumPy从零创建自己的深度学习框架,该框架类似PyTorch能实现自动求导。

日积月累,天道酬勤 6862

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

TabLayout:自定义字体大小

//方式一: private String[] mTabs = new String[]{"案例", "宣传"}; //方式二:动态生成数据 private String[] mTabs = {}; private List<String> firstList = new ArrayList<>(); firstList.add("案例"); firstList.add("宣传"); mTabs = new String[firstList.size()]; firstL.

baidu_24743861的博客 1398

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TabLayout改变字体大小、toast字体居中、Glide修改圆角、将mipmap资源下的图片转换为url形式

tablayout修改默认字体大小、动态改变文本内容、文本颜色、文本大小;toast字体居中;Glide修改圆角;将mipmap下的图片资源(int)转换为url字符串。

shengjiaxin的博客 1182

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Kotlin TabLayout切换字体大小变化

Google自带的TabLayouot太难用了,各种意想不到的bug。看着很美好,所有的状态都有了,但是一运行,一运行一个不吱声。文字颜色状态正常改变,字体加粗只有初始加载有用,但是选中的文字大小没作用,切换后,加粗也失效展示踩坑1踩坑二:网上攻略了一份改变的方法这次试了试,切换没啥问题,但是首次加载,默认第一个tab选中,但是字体style还是不起作用。

1187

android - TabLayout常用属性、自定义底部指示条、选中字体变大

//TabLayout //noinspection GradleCompatible implementation 'com.android.support:design:28.0.0'

a506656675的博客 1538

Tablayout 选中字体放大 自定义

tablayout选中字体变大

lcb_vampire 1787

TabLayout 选中改变字体大小颜色、指示线

Android TabLayout 选中改变字体大小颜色、指示线 1 思路分析 在本次项目中,交互设计要求实现 TabLayout 的点击效果,包括字体大小、颜色、指示线的样式等效果。 2 实现思路 2.1改变 tab 字体大小、颜色 我希望在代码中实现这个效果。首先在 colors.xml添加点击前后的颜色值: <color name="home_tab_selected"&g...

Welcome 3540

Android中TabLayout修改字体大小

abLayout的默认字体大小有点小,无法满足项目的要求,如图所示: 字体过小,虽然TabLayout提供了修改字体大小的相关属性,但改起来有点拐弯抹角,下面就来看看它是如何修改的: <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_heigh

chuyouyinghe的专栏 5031

MFC 改变Tab控件背景及字体颜色

为什么80%的码农都做不了架构师?>>> ...

weixin_34293059的博客 4045

Android --- TabLayout 切换时,改变选项卡下字体的状态(大小、加粗、默认被选中第一个)

文章目录一、前言 一、前言 今天在写 Android 程序的时候使用到了控件 TabLayout ,并想实现以下选项卡的效果。 通过百度搜索了很多篇博主的文章,也受益匪浅,但是总是有一些缺陷,在这里我来给大家整理一个完整的例子,供大家学习使用。 先附上我参考博主的链接:https://blog.youkuaiyun.com/lilihong0/article/details/80927136?utm_source=blogxgwz30 二、源码实例 1.选项卡所在的布局文件 fragment_course_selec

梁同学与Android 3173

Android TabLayout设置选中状态标题字体大小,粗细

-------------------布局文件-----------------&lt;android.support.design.widget.TabLayout android:layout_marginLeft="17dp" android:layout_marginRight="16.8dp" android:layout_width="match_parent"...

baipenggui_bo 2万+

MFC改变按钮颜色,字体等属性

MFC改变按钮颜色,字体等属性

方方洛的博客 5333
上一篇: Python爬取网络数据,并保存到数据库
下一篇: Python3.7的微信群聊自动回复及打包成.exe文件
四块五毛六
博客等级 码龄9年 43粉丝 26原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值