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

如何创建带居中凸起圆形按钮的底部自定义布局?需XML代码

实现底部带凸起圆形按钮的布局

可以通过LayerList绘制带凸起的背景,再配合布局将圆形按钮定位在凸起位置,以下是完整实现代码:

1. 绘制带凸起的底部背景(drawable/bottom_bar_bg.xml)

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 底部基础矩形背景 -->
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#FFFFFF" />
            <corners android:topLeftRadius="16dp" android:topRightRadius="16dp" />
            <padding android:bottom="20dp" /> <!-- 给凸起预留空间 -->
        </shape>
    </item>
    <!-- 中间的圆形凸起 -->
    <item
        android:width="60dp"
        android:height="60dp"
        android:gravity="top|center_horizontal"
        android:top="-30dp"> <!-- 向上偏移一半高度,形成凸起效果 -->
        <shape android:shape="oval">
            <solid android:color="#FFFFFF" />
            <stroke android:width="2dp" android:color="#E0E0E0" />
        </shape>
    </item>
</layer-list>

2. 主布局文件(layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F5F5F5">

    <!-- 底部栏容器 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:background="@drawable/bottom_bar_bg"
        android:orientation="horizontal"
        android:paddingHorizontal="20dp"
        android:gravity="center_vertical"
        app:layout_constraintBottom_toBottomOf="parent">

        <!-- 左侧占位图标 -->
        <ImageView
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:src="@drawable/ic_home"
            android:layout_weight="1"
            android:layout_gravity="center" />

        <!-- 中间圆形按钮(覆盖在凸起上) -->
        <ImageView
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:background="@drawable/circle_button_bg"
            android:src="@drawable/ic_add"
            android:padding="16dp"
            android:layout_marginTop="-30dp" /> <!-- 向上偏移,嵌入凸起位置 -->

        <!-- 右侧占位图标 -->
        <ImageView
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:src="@drawable/ic_profile"
            android:layout_weight="1"
            android:layout_gravity="center" />
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

3. 圆形按钮的背景(drawable/circle_button_bg.xml)

<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="oval" xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FF4081" />
    <stroke android:width="2dp" android:color="#FFFFFF" />
</shape>

关键说明

  • LayerList通过上下两个Shape叠加,顶部圆形向上偏移一半高度,形成底部栏的凸起效果
  • 中间按钮通过负margin向上偏移,刚好嵌入凸起位置,视觉上和背景融为一体
  • 可根据需求调整凸起大小、颜色、圆角半径等参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:55:19