升级com.google.android.material:material:1.5.0后BottomNavigationView标签显示于图标上方的解决方法咨询
不用降级Material库版本就能解决这个问题!你遇到的情况是Material 1.5.0版本对BottomNavigationView的布局逻辑做了优化——当控件高度小于库定义的标准?attr/bottomNavigationBarHeight时,会自动把标签移到图标上方来适配有限空间。而你的布局里用了?android:attr/actionBarSize作为高度,这个值通常比BottomNavigation的默认高度要小,所以触发了这个新行为。
下面给你几个可行的解决办法:
方法1:改用BottomNavigation的标准高度
把布局里的android:layout_height从?android:attr/actionBarSize替换为?attr/bottomNavigationBarHeight,这是Material库为BottomNavigationView设定的标准高度,默认会保持标签在图标下方的布局:
<com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/nav_view" android:layout_width="match_parent" android:layout_height="?attr/bottomNavigationBarHeight" android:background="@color/white" android:alpha="0.9" app:layout_constraintBottom_toBottomOf="parent" app:itemIconTint="@drawable/bottom_nac_icon_color_selector" app:itemTextColor="@drawable/bottom_nac_icon_color_selector" app:menu="@menu/bottom_nav_menu" app:labelVisibilityMode="labeled"/>
方法2:强制保留标签在下方(维持原高度)
如果你的设计必须保留?android:attr/actionBarSize的高度,可以通过指定app:itemLayout属性为Material库的默认item布局,强制标签显示在图标下方:
<com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/nav_view" android:layout_width="match_parent" android:layout_height="?android:attr/actionBarSize" android:background="@color/white" android:alpha="0.9" app:layout_constraintBottom_toBottomOf="parent" app:itemIconTint="@drawable/bottom_nac_icon_color_selector" app:itemTextColor="@drawable/bottom_nac_icon_color_selector" app:menu="@menu/bottom_nav_menu" app:labelVisibilityMode="labeled" app:itemLayout="@layout/design_bottom_navigation_item"/>
方法3:全局主题配置(多控件场景)
如果你的应用里有多个BottomNavigationView都需要这个行为,可以在主题中全局配置,避免重复修改每个控件:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> <!-- 你的其他主题属性 --> <item name="bottomNavigationStyle">@style/CustomBottomNavigationStyle</item> </style> <style name="CustomBottomNavigationStyle" parent="Widget.MaterialComponents.BottomNavigationView"> <item name="itemLayout">@layout/design_bottom_navigation_item</item> </style>
优先推荐方法1,因为遵循Material Design的标准高度能保证控件的交互体验符合官方规范;如果有特殊的高度需求,再选择方法2或3就可以解决问题啦。
内容的提问来源于stack exchange,提问作者Honza Rössler
相关产品推荐
相关产品推荐

