You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API 34下FloatingActionButton的layout_anchor与layout_gravity失效问题

问题背景

我尝试使用BottomAppBar、BottomNavigationView和FloatingActionButton创建底部菜单,查阅多个解决方案及GitHub项目后仍未解决问题。开发环境为Android Studio Koala Feature Drop | 2024.1.2 Patch 1,项目配置compileSdk = 34、targetSdk = 34。Android Studio的XML预览显示正常,但项目运行后显示异常,希望得到排查帮助。

相关代码

XML布局代码

<androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/screen_bg">

        <com.google.android.material.bottomappbar.BottomAppBar
            android:id="@+id/bottomAppBar"
            android:layout_width="match_parent"
            android:layout_height="@dimen/_60sdp"
            android:layout_gravity="bottom"
            android:background="@color/white"
            app:contentInsetEnd="0dp"
            app:contentInsetStart="0dp"
            app:elevation="8dp"
            app:fabAlignmentMode="center"
            app:fabCradleMargin="10dp"
            app:fabCradleRoundedCornerRadius="30dp"
            app:fabCradleVerticalOffset="12dp"
            app:hideOnScroll="true">

            <!-- BottomNavigationView inside the BottomAppBar -->
            <com.google.android.material.bottomnavigation.BottomNavigationView
                android:id="@+id/bottomNavigationView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="0dp"
                android:background="@android:color/transparent"
                app:elevation="8dp"
                app:itemIconTint="@android:color/black"
                app:itemTextColor="@android:color/black"
                app:labelVisibilityMode="labeled"
                app:menu="@menu/bottom_nav_menu" />
        </com.google.android.material.bottomappbar.BottomAppBar>

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@+id/fab_ipo"
            android:layout_width="56dp"
            android:layout_height="56dp"
            android:layout_marginBottom="@dimen/_30sdp"
            android:backgroundTint="@color/purple_b"
            app:fabSize="normal"
            app:layout_anchor="@id/bottomAppBar"
            app:layout_anchorGravity="center"
            app:maxImageSize="25dp"
            app:shapeAppearance="@style/RoundFAB"
            app:srcCompat="@drawable/menu_ipo"
            tools:ignore="ContentDescription" />
    </androidx.coordinatorlayout.widget.CoordinatorLayout>

Theme配置代码

<style name="Theme.BottomBar" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
    </style>

Kotlin初始化代码

private lateinit var binding: DashboardWorkingBinding
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.dashboard_working)
        binding.bottomNavigationView.background = null
    }
排查及解决方案

从预览正常但运行异常的现象来看,问题大概率出在版本兼容、布局参数冲突或渲染缓存上,可按以下步骤排查:

  • 匹配Material Components版本:确保build.gradle中Material依赖版本与compileSdk=34兼容,建议使用com.google.android.material:material:1.12.0或更高稳定版本,版本不匹配会导致运行时渲染异常。
  • 调整BottomNavigationView布局参数:将宽度改为match_parent以填满BottomAppBar,移除冗余的layout_marginStart,同时取消自身的elevation避免和BottomAppBar重叠:
    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottomNavigationView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/transparent"
        app:elevation="0dp"
        app:itemIconTint="@android:color/black"
        app:itemTextColor="@android:color/black"
        app:labelVisibilityMode="labeled"
        app:menu="@menu/bottom_nav_menu" />
    
  • 修正BottomAppBar高度:使用系统内置的?attr/actionBarSize替代自定义的@dimen/_60sdp,保证不同设备上的兼容性:
    android:layout_height="?attr/actionBarSize"
    
  • 移除FAB的marginBottom:FAB通过layout_anchor绑定BottomAppBar,额外设置marginBottom会导致位置偏移,删除该属性,由fabCradleVerticalOffset控制垂直距离即可。
  • 调整主题配置:当前主题带DarkActionBar,若不需要顶部ActionBar,改为NoActionBar主题避免样式冲突:
    <style name="Theme.BottomBar" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <!-- 保留原有属性 -->
    </style>
    
  • 清理重建项目:执行Build > Clean Project和Build > Rebuild Project,清除预览与运行时的缓存差异后重新运行。

内容的提问来源于stack exchange,提问作者AiVision

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:27:12