如何在AppCompat主题下使用Extended Floating Action Button?
当然可以用,但你的崩溃问题根源在于Extended Floating Action Button是Material Components库的组件,它依赖Material主题提供的核心样式属性,而Theme.AppCompat.Light.NoActionBar并没有包含这些属性,导致渲染时找不到必要的样式值而崩溃。
解决步骤:
最推荐的方案:切换到Material Components主题
把你的App主题改成Theme.MaterialComponents.Light.NoActionBar,它完全继承自AppCompat主题的特性,同时内置了Material组件所需的所有样式属性,无需额外配置。修改styles.xml:<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar"> <!-- 保留你原来的颜色配置 --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>如果不想替换主题:在AppCompat主题中补充Material样式
如果你坚持使用AppCompat主题,需要手动添加ExtendedFAB所需的样式和属性,在styles.xml中修改:<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- 引入ExtendedFAB的Material样式 --> <item name="extendedFloatingActionButtonStyle">@style/Widget.MaterialComponents.ExtendedFloatingActionButton</item> <!-- 添加Material主题必需的颜色属性 --> <item name="colorSurface">@color/white</item> <item name="colorOnSurface">@color/black</item> <!-- 保留原有颜色配置 --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
额外优化你的布局代码:
注意到你在ConstraintLayout中同时使用了android:layout_gravity和约束属性,这在ConstraintLayout里是冗余的,layout_gravity不会生效。如果想让按钮靠底部右侧,修改布局为:
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton android:id="@+id/viewMore" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="16dp" android:text="View More" android:textColor="@color/colorPrimary" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" />
这样按钮会正确定位在底部右侧,符合你的初始需求。
内容的提问来源于stack exchange,提问作者Karu
相关产品推荐
相关产品推荐

