如何设置Android TabLayout的tab指示器高度与父布局/tab高度一致
Android TabLayout 指示器高度匹配Tab高度的实现方案
你之前硬编码固定高度的方式可以实现效果,但维护成本高,后续调整Tab高度时需要同步修改指示器高度参数,容易出现不一致的问题,可通过以下更优方案实现:
- 方案一:使用官方原生属性(推荐,适用于Material Components 1.1.0及以上版本)
官方提供了匹配特性,直接将app:tabIndicatorHeight设置为0dp,系统就会自动让指示器高度和Tab的实际高度完全对齐,此时TabLayout的android:layout_height可以自由设置为wrap_content或者其他固定值,无需再同步维护指示器的高度参数。
示例代码:<com.google.android.material.tabs.TabLayout android:id="@+id/camera_mode_tabs" android:layout_alignParentBottom="true" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabIndicator="@drawable/mode_indicator" app:tabGravity="center" app:tabIndicatorHeight="0dp" /> - 方案二:代码动态适配(适用于低版本Material Components依赖场景)
如果你的项目依赖的Material组件版本低于1.1.0,不支持上述0dp特性,可以在TabLayout渲染完成后,动态获取Tab的高度赋值给指示器:camera_mode_tabs.post { // 获取TabLayout实际渲染高度 val tabHeight = camera_mode_tabs.height // 动态设置指示器高度 camera_mode_tabs.setSelectedTabIndicatorHeight(tabHeight) }
注意事项:如果使用了自定义的tabIndicator drawable,需要确保drawable没有固定写死高度,避免覆盖上述配置的效果;后续需要调整Tab高度时,只需要修改TabLayout的padding或者layout_height参数即可,指示器高度会自动同步。
内容的提问来源于stack exchange,提问作者Son of Stackoverflow
相关产品推荐
相关产品推荐

