是否可以将浮动操作按钮嵌入操作栏?

时间:2016-06-16 11:51:01

标签: android android-actionbar android-actionbar-compat floating-action-button

我想得到这样的东西。有可能吗?

enter image description here

如果没有实际的标题项,this question的答案就不适用,我在这里没有。操作栏不是我可以锚定的项目,或者至少我不知道如何做到这一点。

2 个答案:

答案 0 :(得分:1)

这可以使用自定义工具栏作为 supportActionBar 来完成。

而不是使用 layout_anchor 放置 FAB,我们可以使用 ConstraintLayout 作为根视图将其约束到工具栏。

<?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">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?android:attr/actionBarSize"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    </com.google.android.material.appbar.AppBarLayout>

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="64dp"
        android:layout_marginRight="64dp"
        android:src="@drawable/ic_baseline_play_arrow_24"
        app:layout_constraintBottom_toBottomOf="@id/appbar"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/appbar" />


</androidx.constraintlayout.widget.ConstraintLayout>

并确保将 AppTheme 与 NoActionBar 一起使用,例如 Theme.MaterialComponents.DayNight.NoActionBar

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

然后在活动中设置 supportActionBar

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val toolbar = findViewById<Toolbar>(R.id.toolbar)
    setSupportActionBar(toolbar)
}

预览:

enter image description here

答案 1 :(得分:0)

我尝试了一个解决方案,但它不是直接解决方案,希望它会有所帮助

在根坐标布局中,在它的顶部创建一个子空布局,并将背景颜色更改为动作栏的相同颜色,然后新的空布局将直接在动作栏之后,它将显示为操作栏并根据需要给它适当的高度。你的代码将是那样的

空布局:

<LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:id="@+id/tst"
                android:background="@android:color/black"
                android:layout_height="50dp"/>

您可以根据需要增加高度,但这是我设备的最佳高度

浮动按钮:

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_anchor="@id/tst"
        app:layout_anchorGravity="top|center"
/>