TabLayout:为每个选项卡设置自定义颜色

Nir*_*Raj 6 android android-tablayout

我看到很多问题说明如何为选定(活动)和未选中(非活动)选项卡设置不同的颜色.我也知道谷歌提供void setTabTextColors (int normalColor, int selectedColor)了实现这一目标.

我的要求有点不同,我正在研究一个带有TabLayout和的测验应用程序CardView.TabLayout允许用户在问题之间导航并CardView用于显示问题.

我需要设置用户已选择答案的选项卡的颜色与用户尚未应答的选项卡的颜色不同.默认情况下,TextColor是黑色的,但如果用户选择了答案,那么tabcolor应该变为蓝色(仅适用于例如.)并且它应该保持这种状态直到用户退出.我有一个int名为的数组Select,它将保存用户选择的选项的值(值范围在1到4之间).在分配Select数组时,我也用-1初始化它.我想到设置一个循环,然后如果数组是-1保持选项卡原样或将tabcolor设置为蓝色.

我该如何实现此功能?

小智 3

您可以通过查询此子项并手动更改 TextView 来使用 TabLayout 内部结构。当您升级到另一个支持库版本时,这可能会破坏您的代码,但只要您在更新时进行跟踪和测试,它应该可以工作:

private void updateTabTextColors() {
    LinearLayout tabsContainer = (LinearLayout) mTabLayout.getChildAt(0);
    for (int i = 0; i < mTabLayout.getTabCount(); i++) {
        LinearLayout item = (LinearLayout) tabsContainer.getChildAt(i);
        TextView tv = (TextView) item.getChildAt(1);
        tv.setTextColor(Select[i] == -1 ? Color.BLACK : Color.BLUE);
    }
}
Run Code Online (Sandbox Code Playgroud)