如何更改新的TabLayout指标的颜色和高度

我正在玩新的android.support.design.widget.TabLayout ,并发现一个问题,在类定义中,没有方法来改变指标的颜色和默认的高度。

做了一些调查,发现默认的指标颜色是从AppTheme中提取的。 具体从这里:

 <item name="colorAccent">#FF4081</item> 

现在,在我的情况下,如果我更改colorAccent ,它将影响所有其他视图使用此值作为背景颜色,例如ProgressBar

现在有什么办法可以改变indicatorColor除了colorAccent以外的其他东西吗?

有问题,新的TabLayout使用值colorAccent的指标颜色,我决定挖掘到android.support.design.widget.TabLayout实现,发现没有公共方法来定制这个。 但是我发现这个TabLayout的样式规范:

 <style name="Base.Widget.Design.TabLayout" parent="android:Widget"> <item name="tabMaxWidth">@dimen/tab_max_width</item> <item name="tabIndicatorColor">?attr/colorAccent</item> <item name="tabIndicatorHeight">2dp</item> <item name="tabPaddingStart">12dp</item> <item name="tabPaddingEnd">12dp</item> <item name="tabBackground">?attr/selectableItemBackground</item> <item name="tabTextAppearance">@style/TextAppearance.Design.Tab</item> <item name="tabSelectedTextColor">?android:textColorPrimary</item> </style> 

有了这个样式规范,现在我们可以像这样定制TabLayout:

 <android.support.design.widget.TabLayout xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@id/pages_tabs" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:tabIndicatorColor="@android:color/white" app:tabIndicatorHeight="4dp"/> 

问题解决了,标签指示器的颜色和高度都可以从默认值改变。

通过devise支持库,您现在可以在xml中更改它们:

要更改TabLayout指示器的颜色 ,请执行以下操作:

 app:tabIndicatorColor="@color/color" 

要更改TabLayout指标的高度

 app:tabIndicatorHeight="4dp" 

由于我无法发布后续的android开发人员的评论 ,这里是一个更新的答案谁需要以编程方式设置选定的选项卡指标颜色的其他人:

 tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#FFFFFF")); 

同样,对于身高:

 tabLayout.setSelectedTabIndicatorHeight((int) (2 * getResources().getDisplayMetrics().density)); 

这些方法最近才被添加到支持库的修订版本23.0.0 ,这就是为什么Soheil Setayeshi的回答使用了反思。

随着devise支持库v23,你可以设置编程的颜色和高度。

只用于身高:

 TabLayout.setSelectedTabIndicatorHeight(int height) 

这里是官方的javadoc 。

只用于颜色:

 TabLayout.setSelectedTabIndicatorColor(int color) 

这里是官方的javadoc 。

您可以在这里findGoogle跟踪器中的信息。

 app:tabIndicatorColor="@android:color/white" 

要以编程方式更改指示器颜色和高度,可以使用reflection。 例如下面的指示颜色使用代码:

  try { Field field = TabLayout.class.getDeclaredField("mTabStrip"); field.setAccessible(true); Object ob = field.get(tabLayout); Class<?> c = Class.forName("android.support.design.widget.TabLayout$SlidingTabStrip"); Method method = c.getDeclaredMethod("setSelectedIndicatorColor", int.class); method.setAccessible(true); method.invoke(ob, Color.RED);//now its ok } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } 

并改变指标高度使用“setSelectedIndicatorHeight”而不是“setSelectedIndicatorColor”,然后调用它所需的高度

你可以使用xml来改变它

 app:tabIndicatorColor="#fff" 

只需在代码中放置这一行。 如果更改颜色,则更改圆括号中的颜色值。

 tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#FFFFFF")); 
 tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#FFFFFF")); tabLayout.setSelectedTabIndicatorHeight((int) (2 * getResources().getDisplayMetrics().density)); 

Foto指标使用这个:

  tabLayout.setSelectedTabIndicatorColor(ContextCompat.getColor(this, R.color.colorWhite));//put your color