图像顶部带有 TextView 的自定义浮动操作按钮
Custom Floating Action Button with TextView on top of Image
我正在尝试创建与图片类似的内容。我正在使用 CoordinatorLayout
、BottomAppBar
和 BottomNavigation
,但底部应用栏需要一个浮动操作按钮来在按钮周围创建底座。
我需要浮动操作按钮有一个图像和一个文本视图,我将以编程方式更新它们。
有没有一种方法可以在不创建整个自定义底部应用栏的情况下实现这一点?
您可以拥有一个透明的 FAB,并在其上使用您的自定义图像绘制布局 & TextView
;
类似于FAB,可以在布局上使用app:layout_anchor
& app:layout_anchorGravity
将其放置在FAB之上。
这是一个实现:
<?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="@color/black">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/coordinator_layout"
android:layout_width="match_parent"
android:layout_height="100dp"
app:layout_constraintBottom_toBottomOf="parent">
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab_cutout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="0"
app:layout_anchor="@id/navigation" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="16dp"
app:layout_anchor="@id/navigation"
app:layout_anchorGravity="center_horizontal">
<com.google.android.material.imageview.ShapeableImageView
android:layout_width="60dp"
android:layout_height="60dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:shapeAppearance="@style/roundedimage"
app:srcCompat="@drawable/with_cart1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="99"
android:textColor="@color/white"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.bottomappbar.BottomAppBar
android:id="@+id/navigation"
style="@style/Widget.MaterialComponents.BottomAppBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:backgroundTint="@android:color/holo_blue_dark"
app:contentInsetRight="0dp"
app:contentInsetStart="0dp"
app:fabCradleMargin="10dp"
app:fabCradleVerticalOffset="8dp">
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigation"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:backgroundTint="@android:color/transparent"
app:elevation="0dp"
app:itemIconTint="@android:color/white"
app:itemRippleColor="@android:color/white"
app:itemTextColor="@android:color/white"
app:labelVisibilityMode="labeled"
app:menu="@menu/bottom_nav_menu_4" />
</com.google.android.material.bottomappbar.BottomAppBar>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
结果:
我正在尝试创建与图片类似的内容。我正在使用 CoordinatorLayout
、BottomAppBar
和 BottomNavigation
,但底部应用栏需要一个浮动操作按钮来在按钮周围创建底座。
我需要浮动操作按钮有一个图像和一个文本视图,我将以编程方式更新它们。
有没有一种方法可以在不创建整个自定义底部应用栏的情况下实现这一点?
您可以拥有一个透明的 FAB,并在其上使用您的自定义图像绘制布局 & TextView
;
类似于FAB,可以在布局上使用app:layout_anchor
& app:layout_anchorGravity
将其放置在FAB之上。
这是一个实现:
<?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="@color/black">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/coordinator_layout"
android:layout_width="match_parent"
android:layout_height="100dp"
app:layout_constraintBottom_toBottomOf="parent">
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab_cutout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="0"
app:layout_anchor="@id/navigation" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="16dp"
app:layout_anchor="@id/navigation"
app:layout_anchorGravity="center_horizontal">
<com.google.android.material.imageview.ShapeableImageView
android:layout_width="60dp"
android:layout_height="60dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:shapeAppearance="@style/roundedimage"
app:srcCompat="@drawable/with_cart1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="99"
android:textColor="@color/white"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.bottomappbar.BottomAppBar
android:id="@+id/navigation"
style="@style/Widget.MaterialComponents.BottomAppBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:backgroundTint="@android:color/holo_blue_dark"
app:contentInsetRight="0dp"
app:contentInsetStart="0dp"
app:fabCradleMargin="10dp"
app:fabCradleVerticalOffset="8dp">
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigation"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:backgroundTint="@android:color/transparent"
app:elevation="0dp"
app:itemIconTint="@android:color/white"
app:itemRippleColor="@android:color/white"
app:itemTextColor="@android:color/white"
app:labelVisibilityMode="labeled"
app:menu="@menu/bottom_nav_menu_4" />
</com.google.android.material.bottomappbar.BottomAppBar>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
结果: