以编程方式将 TabLayout 中的选项卡文本颜色更改为不同颜色

2024-04-13

我的屏幕上有 7 个日期选项卡,选择选项卡时,文本为黑色;而其他可选选项卡的颜色为白色。如果日期是另一个月,我希望文本颜色为灰色。

我假设第一个选项卡是 0,第二个选项卡是 1,一直持续到 6。 如图所示,我想更改选项卡(3)、选项卡(4)、选项卡(5)和选项卡(6)的文本颜色。当满足所需条件(不是 xml)时,如何以编程方式完成将这 4 个选项卡中的文本颜色设置为灰色?

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:paddingTop="8dp"
    android:paddingBottom="8dp"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin">

    <TextView
        android:id="@+id/lblWeekMsg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/week"
        android:textAppearance="?attr/textAppearanceListItem" />
    <TextView
        android:id="@+id/lblWeekNo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toEndOf="@id/lblWeekMsg"
        android:layout_alignBaseline="@id/lblWeekMsg"
        android:text=""
        android:textAppearance="?attr/textAppearanceListItem" />

</RelativeLayout>

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/coordinator_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="30">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/app_bar_layout">

        <android.support.design.widget.TabLayout
            android:id="@+id/tab_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabTextColor="@android:color/white"
            app:tabMode="scrollable"
            app:tabGravity="fill" />

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

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

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

我用这种方式创建带有片段的选项卡

public void setupViewPager(ViewPager viewPager, ArrayList<String> id, ArrayList<String> tasks,
                           ArrayList<Double> mondayHours, ArrayList<Double> tuesdayHours,
                           ArrayList<Double> wednesdayHours, ArrayList<Double> thursdayHours,
                           ArrayList<Double> fridayHours, ArrayList<Double> saturdayHours,
                           ArrayList<Double> sundayHours) {
    Bundle bundle = new Bundle();
    bundle.putStringArrayList(EXTRA_CHECKED_TASK_ID, id);
    bundle.putStringArrayList(EXTRA_CHECKED_TASKS, tasks);
    bundle.putSerializable(EXTRA_MONDAY, mondayHours);
    bundle.putSerializable(EXTRA_TUESDAY, tuesdayHours);
    bundle.putSerializable(EXTRA_WEDNESDAY, wednesdayHours);
    bundle.putSerializable(EXTRA_THURSDAY, thursdayHours);
    bundle.putSerializable(EXTRA_FRIDAY, fridayHours);
    bundle.putSerializable(EXTRA_SATURDAY, saturdayHours);
    bundle.putSerializable(EXTRA_SUNDAY, sundayHours);

    final String MON = "MON" + "\n" + MainActivity.sevenDatesList.get(0);
    final String TUE = "TUE" + "\n" + MainActivity.sevenDatesList.get(1);
    final String WED = "WED" + "\n" + MainActivity.sevenDatesList.get(2);
    final String THU = "THU" + "\n" + MainActivity.sevenDatesList.get(3);
    final String FRI = "FRI" + "\n" + MainActivity.sevenDatesList.get(4);
    final String SAT = "SAT" + "\n" + MainActivity.sevenDatesList.get(5);
    final String SUN = "SUN" + "\n" + MainActivity.sevenDatesList.get(6);

    adapter = new ViewPagerAdapter(getSupportFragmentManager(), bundle);
    adapter.addFragment(new MondayFragment(), MON);
    adapter.addFragment(new TuesdayFragment(), TUE);
    adapter.addFragment(new WednesdayFragment(), WED);
    adapter.addFragment(new ThursdayFragment(), THU);
    adapter.addFragment(new FridayFragment(), FRI);
    adapter.addFragment(new SaturdayFragment(), SAT);
    adapter.addFragment(new SundayFragment(), SUN);

    viewPager.setAdapter(adapter);
}

我曾尝试过this https://stackoverflow.com/questions/2804688/how-to-change-the-color-of-the-tabs-indicator-text-in-android,但我的代码没有使用 tabWidget。 我曾尝试过this https://stackoverflow.com/questions/5577688/android-change-tab-text-color-programmatically也是,但我的代码没有使用 tabHost。

我的解决方案基于 @Bhavesh Misri 的建议:

ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0);
    //get number of tab
    int tabsCount = vg.getChildCount();
    //loop the tab
    for (int j = 0; j < tabsCount; j++) {
        //get view of selected tab
        ViewGroup vgTab = (ViewGroup) vg.getChildAt(j);

        //when the day is not required to display - out of range
        if( j<lesserThan || j>largerThan ){
            //disable the selected tab
            vgTab.setEnabled(false);
            //set the not-required tab color transparent ratio
            vgTab.setAlpha((float) 0.50);
        } 
    }

尝试一下,让我知道这是否适合您:

tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
            if (tab.getPosition() == 0) {
                tabLayout.getTabAt(0).getIcon().setAlpha(255);
                tabLayout.getTabAt(1).getIcon().setAlpha(100);
                tabLayout.getTabAt(2).getIcon().setAlpha(100);
            } else if (tab.getPosition() == 1) {
                tabLayout.getTabAt(0).getIcon().setAlpha(100);
                tabLayout.getTabAt(1).getIcon().setAlpha(255);
                tabLayout.getTabAt(2).getIcon().setAlpha(100);

            } else if (tab.getPosition() == 2) {
                tabLayout.getTabAt(0).getIcon().setAlpha(100);
                tabLayout.getTabAt(1).getIcon().setAlpha(100);
                tabLayout.getTabAt(2).getIcon().setAlpha(255);

            }
        }

@Surya Prakash Kushawah 你的方式更好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式将 TabLayout 中的选项卡文本颜色更改为不同颜色 的相关文章

随机推荐

  • 围绕图中的点绘制圆圈

    我有两个矩阵 timeline 0 0008 0 0012 0 0016 0 0020 0 0024 0 0028 原始数据 79 8400 69 9390 50 0410 55 5082 34 5200 37 4486 31 4237 2
  • Scala 编译器有哪些特殊类型?

    Scala 非常重视如何将看似语言的功能实现为库功能 是否有该语言特别处理的类型列表 是在规范中还是作为实现细节 例如 这包括优化元组的客场匹配 与模式匹配 推导式 try catch 块和其他语言结构相关的特殊约定又如何呢 String
  • CodeBuild 不报告失败的测试

    我正在使用 CodeBuild 构建我的 NPM 项目 我的构建规范中有一个特定的报告组 并且我正在使用 Jest 和npm test命令 当所有测试通过后 将成功报告给 CodeBuild 报告组 但是 如果其中一项测试失败 我会收到错误
  • 为什么 Google Analytics 不跟踪任何事件?

    我已经实现了几乎标准的示例
  • Azure DevOps - 自定义任务 - 具有 Azure 身份验证的 PowerShell

    到目前为止 我使用 Azure PowerShell 任务在 Azure 上下文中执行 PowerShell 脚本 https learn microsoft com en us azure devops pipelines tasks d
  • 大浮点和的精度

    我正在尝试对正递减浮点数的排序数组求和 我发现对它们求和的最佳方法是开始从最低到最高将数字相加 我编写此代码是为了提供一个示例 但是 从最高数字开始的总和更精确 为什么 当然 1 k 2之和应该是f 1 644934066848226 in
  • 在 Java 循环中重新声明变量

    在Java中 我们不能将一个变量与另一个同名变量声明在同一作用域中 int someInteger 3 int someInteger 13 语法错误 无法编译 但是 如果我们将其放入循环中 for int i 0 i lt 10 i in
  • Google 云端硬盘哑剧类型列表? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 As per https developers google com drive manage uplo
  • 如何避免右侧滚动条与顶部导航栏(引导程序)重叠?

    我有一个网站 导航栏固定在顶部 导航栏位于左侧 当网站需要滚动时 右侧的滚动条与顶部导航栏重叠 我希望导航栏从顶部导航栏下方开始 我摆弄了一个问题的例子 https jsfiddle net jsmnsLm7 https jsfiddle
  • 不受信任的 URL 字符串的安全 Process.Start 实现

    我的目标是在用户默认浏览器中安全地打开网页 该网页的 URL 被视为 不受信任 将其视为使用该软件打开的文档中的链接 但该文档可能来自任何地方 并且其中的链接可能是恶意的 我想避免有人将 C Windows malicious code e
  • 来自连接表的 SQL 计数

    我有一个表 lijsten 一个表 werknemerlijsten 和一个表 categorieen 现在我正在使用查询来获取计数 SELECT id naam beschrijving count wl werknemer id as
  • 复杂的查询应该写在Repository层还是Service层?

    我计划将我们的数据访问层迁移到使用存储库模式和工作单元 我确实知道存储库将帮助我轻松地将持久性存储 数据库 集合等 和技术 例如 EF 更改为 MongoDB 所以我注意到存储库实现的一些关键点 例如 Return IEnumerable代
  • 从数组 THREE.js 创建纹理

    我正在研究地形生成器 但我不知道如何处理颜色 我希望能够生成一张占据整个 PlaneGeometry 的图像 我的问题是如何根据我的高度图创建一个覆盖整个 PlaneGeometry 没有环绕 的单个图像 我可以想到一种方法 但我不确定它是
  • 更改 TabBarItem 的 ViewController

    是否可以更改 替换 UITabBarController 中选项卡之一的 ViewController 和 View 我想从特定选项卡以任意顺序在 3 个不同的视图控制器之间切换 这就是导航控制器不可能的原因 它们是使用 setViewCo
  • 为什么 TBitBtn 中包含的字形如此丑陋且过时? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Jetty 通过 Maven 正确运行,但作为 jar 运行不正确

    如果我的标题具有误导性 不正确 请提出更具描述性的内容 这是我能想到的最好的内容 我已经使用 spring roo 创建了自己的网络应用程序 但尚未编辑任何代码 我正在使用 Maven 和 jetty 构建并运行 Web 应用程序 当我执行
  • 使用 javascript 自动增加 firebase 中的值

    你好 我正在开发一些 firebase 项目 我可以通过 javascript 将我的数据保存到 firebase 数据库中 但我无法弄清楚如何自动增加数据库的子值 我的子值是 duyuru 您可以在下面看到详细信息 我在下面分享我的代码
  • 如何使用 Groovy 修剪列表中的所有元素?

    我需要在 groovy 或 grails 中修剪列表中的所有元素 最好的解决方案是什么 假设它是一个字符串列表 并且您想要修剪每个字符串 您可以使用扩展运算符 http groovy codehaus org Operators Opera
  • 从数组随机 URL 重定向

    政治动物 contentscript js 加载到清单 json 中列出的每个页面上 该插件将新闻网站网站上的所有图像替换为以下图片 穿西装的动物 作为对新闻的评论 专为 Web 2 打造 2013 年 11 月 20 日 随机图像数组 v
  • 以编程方式将 TabLayout 中的选项卡文本颜色更改为不同颜色

    我的屏幕上有 7 个日期选项卡 选择选项卡时 文本为黑色 而其他可选选项卡的颜色为白色 如果日期是另一个月 我希望文本颜色为灰色 我假设第一个选项卡是 0 第二个选项卡是 1 一直持续到 6 如图所示 我想更改选项卡 3 选项卡 4 选项卡