如何在两个小部件/布局之间添加新的"浮动操作按钮"

Waz*_*_Be 282 android floating-action-button android-coordinatorlayout

我想你已经看到了新的Android设计指南,新的"浮动动作按钮"又名"FAB"

例如这个粉红色的按钮:

在此输入图像描述

我的问题听起来很愚蠢,我已经尝试了很多东西,但是将这个按钮放在两个布局的交叉点上的最佳方法是什么?

在上面的例子中,这个按钮完全位于我们可以想象的ImageView和relativeLayout之间.

我已经尝试了很多调整,但我确信有一个正确的方法来做到这一点.

Dav*_*vid 471

最佳实践:

  • 添加compile 'com.android.support:design:25.0.1'到gradle文件
  • 使用CoordinatorLayout作为根视图.
  • 添加layout_anchor到FAB并将其设置为顶视图
  • 添加layout_anchorGravity到FAB并将其设置为:bottom|right|end

在此输入图像描述

<android.support.design.widget.CoordinatorLayout
    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">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:id="@+id/viewA"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="0.6"
            android:background="@android:color/holo_purple"
            android:orientation="horizontal"/>

        <LinearLayout
            android:id="@+id/viewB"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="0.4"
            android:background="@android:color/holo_orange_light"
            android:orientation="horizontal"/>

    </LinearLayout>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:clickable="true"
        android:src="@drawable/ic_done"
        app:layout_anchor="@id/viewA"
        app:layout_anchorGravity="bottom|right|end"/>

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

  • 为什么Android的文档中没有这一切? (29认同)
  • @Aprendiz我也想要一个引用但我能看出为什么这个比HughJeffner更好的答案.我发现它更简单,更灵活,更少hackish.您不会对任何layout_height或margin值进行硬编码,这些值可能会随时间变化或动态定义.Hugh的答案可能适用于一些简单的情况,也许可能是一些第三方库的解决方法,它们不完全支持```CoordinatorLayout```和```layout_anchor```和```layout_anchorGravity```功能,就像他正在使用的那样,[futuresimples](https://github.com/futuresimple/android-floating-action-button). (3认同)
  • 使用app:layout_anchor导致我渲染问题(linearlayout layoutparams无法转换为coordinatorlayout.:( (3认同)
  • 我正在寻找这个.+1表示简单. (2认同)

Hug*_*ner 91

看起来像这个例子中最干净的方式是:

  • 使用RelativeLayout
  • 将2个相邻视图一个放在另一个下面
  • 将FAB与父右/右对齐并添加右/尾边距
  • 将FAB对齐标题视图的底部并添加边距,其大小为FAB的一半,包括阴影

从shamanland实施改编的示例,使用您希望的任何FAB.假设FAB高64dp,包括阴影:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <View
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="120dp"
    />

    <View
        android:id="@+id/body"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/header"
    />

    <fully.qualified.name.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignBottom="@id/header"
        android:layout_marginBottom="-32dp"
        android:layout_marginRight="20dp"
    />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

FAB布局示例

  • android:layout_marginBottom =" - 32dp"带有按钮的wrap_content的硬编码值是不好的解决方案 (23认同)
  • 答案不是最新的,请查看:http://stackoverflow.com/a/30990661/1038702 (3认同)

Roe*_*oel 51

您可以通过单击文件>导入示例导入Android Studio中的Google示例项目...

导入样本

此示例包含一个继承自FrameLayout的FloatingActionButton视图.

编辑 使用新的支持设计库,您可以像在此示例中一样实现它:https: //github.com/chrisbanes/cheesesquare


Ode*_*ner 16

使用AppCompat 22,旧设备支持FAB.

在build.gradle(app)中添加新的支持库:

compile 'com.android.support:design:22.2.0'
Run Code Online (Sandbox Code Playgroud)

然后你可以在你的xml中使用它:

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:src="@android:drawable/ic_menu_more"
    app:elevation="6dp"
    app:pressedTranslationZ="12dp" />
Run Code Online (Sandbox Code Playgroud)

要使用elevationpressedTranslationZ属性,app需要命名空间,因此将此命名空间添加到您的布局: xmlns:app="http://schemas.android.com/apk/res-auto"

  • 添加有关`app`命名空间的信息 (3认同)

Ver*_*nie 14

现在它是官方设计支持库的一部分.

在你的gradle中:

compile 'com.android.support:design:22.2.0'
Run Code Online (Sandbox Code Playgroud)

http://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html

  • 你的答案有点不清楚和模糊,你能否进一步解释什么是DSL的一部分,并可能引用该页面的相关信息. (5认同)

Ole*_* K. 11

试试这个库(javadoc在这里),min API级别为7:

dependencies {
    compile 'com.shamanland:fab:0.0.8'
}
Run Code Online (Sandbox Code Playgroud)

它提供了单个小部件,可以通过Theme,xml或java-code自定义它.

光 之间

它使用起来非常简单.根据Promoted Actions模式提供normalmini实现.

<com.shamanland.fab.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_action_my"
    app:floatingActionButtonColor="@color/my_fab_color"
    app:floatingActionButtonSize="mini"
    />
Run Code Online (Sandbox Code Playgroud)

尝试编译演示应用程序.有一个详尽的例子:浅色和深色主题,使用ListView,在两个视图之间对齐.

  • 只是添加到这个答案^您还可以使用其他可用的backport库,如:https://github.com/FaizMalkani/FloatingActionButton,和https://github.com/makovkastar/FloatingActionButton.这两者似乎都有更多支持.但只需按照本答案中列出的来源的详细信息视图.效果很好. (3认同)

Vla*_*dak 9

这是一个适用于Android的 aditional免费浮动操作按钮库.它有许多自定义项,需要SDK 9及更高版本

在此输入图像描述

完整的演示视频

dependencies {
    compile 'com.scalified:fab:1.1.2'
}
Run Code Online (Sandbox Code Playgroud)

  • 问题不在于*你如何使用FAB*,但你如何*定位它以使它跨越两个视图.叹. (3认同)

小智 6

保持简单通过提供舍入的xml背景,使用TextView添加浮动操作按钮.- 将编译添加com.android.support:design:23.1.1到gradle文件

  • 使用CoordinatorLayout作为根视图.
  • 在结束CoordinatorLayout之前介绍一个textView.
  • 在Drawable内画一个圆圈.

Circle Xml是

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">

    <solid
        android:color="@color/colorPrimary"/>
    <size
        android:width="30dp"
        android:height="30dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)

布局xml是

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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">


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="5"
    >

    <RelativeLayout
        android:id="@+id/viewA"
        android:layout_height="0dp"
        android:layout_width="match_parent"
        android:layout_weight="1.6"
        android:background="@drawable/contact_bg"
        android:gravity="center_horizontal|center_vertical"
        >
        </RelativeLayout>

    <LinearLayout
        android:layout_height="0dp"
        android:layout_width="match_parent"
        android:layout_weight="3.4"
        android:orientation="vertical"
        android:padding="16dp"
        android:weightSum="10"
        >

        <LinearLayout
            android:layout_height="0dp"
            android:layout_width="match_parent"
            android:layout_weight="1"
            >
            </LinearLayout>

        <LinearLayout
            android:layout_height="0dp"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:weightSum="4"
            android:orientation="horizontal"
            >
            <TextView
                android:layout_height="match_parent"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:text="Name"
                android:textSize="22dp"
                android:textColor="@android:color/black"
                android:padding="3dp"
                />

            <TextView
                android:id="@+id/name"
                android:layout_height="match_parent"
                android:layout_width="0dp"
                android:layout_weight="3"
                android:text="Ritesh Kumar Singh"
                android:singleLine="true"
                android:textSize="22dp"
                android:textColor="@android:color/black"
                android:padding="3dp"
                />

            </LinearLayout>



        <LinearLayout
            android:layout_height="0dp"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:weightSum="4"
            android:orientation="horizontal"
            >
            <TextView
                android:layout_height="match_parent"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:text="Phone"
                android:textSize="22dp"
                android:textColor="@android:color/black"
                android:padding="3dp"
                />

            <TextView
                android:id="@+id/number"
                android:layout_height="match_parent"
                android:layout_width="0dp"
                android:layout_weight="3"
                android:text="8283001122"
                android:textSize="22dp"
                android:textColor="@android:color/black"
                android:singleLine="true"
                android:padding="3dp"
                />

        </LinearLayout>



        <LinearLayout
            android:layout_height="0dp"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:weightSum="4"
            android:orientation="horizontal"
            >
            <TextView
                android:layout_height="match_parent"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:text="Email"
                android:textSize="22dp"
                android:textColor="@android:color/black"
                android:padding="3dp"
                />

            <TextView
                android:layout_height="match_parent"
                android:layout_width="0dp"
                android:layout_weight="3"
                android:text="ritesh.singh@betasoftsystems.com"
                android:textSize="22dp"
                android:singleLine="true"
                android:textColor="@android:color/black"
                android:padding="3dp"
                />

        </LinearLayout>


        <LinearLayout
            android:layout_height="0dp"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:weightSum="4"
            android:orientation="horizontal"
            >
            <TextView
                android:layout_height="match_parent"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:text="City"
                android:textSize="22dp"
                android:textColor="@android:color/black"
                android:padding="3dp"
                />

            <TextView
                android:layout_height="match_parent"
                android:layout_width="0dp"
                android:layout_weight="3"
                android:text="Panchkula"
                android:textSize="22dp"
                android:textColor="@android:color/black"
                android:singleLine="true"
                android:padding="3dp"
                />

        </LinearLayout>

    </LinearLayout>

</LinearLayout>


    <TextView
        android:id="@+id/floating"
        android:transitionName="@string/transition_name_circle"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="16dp"
        android:clickable="false"
        android:background="@drawable/circle"
        android:elevation="10dp"
        android:text="R"
        android:textSize="40dp"
        android:gravity="center"
        android:textColor="@android:color/black"
        app:layout_anchor="@id/viewA"
        app:layout_anchorGravity="bottom"/>

        </android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

点击这里查看它的外观


小智 5

将其添加到您的gradle文件中

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.0'
    compile 'com.android.support:design:23.0.1'
}
Run Code Online (Sandbox Code Playgroud)

这是您的activity_main.xml

<android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <LinearLayout
                android:id="@+id/viewOne"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="0.6"
                android:background="@android:color/holo_blue_light"
                android:orientation="horizontal"/>

            <LinearLayout
                android:id="@+id/viewTwo"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="0.4"
                android:background="@android:color/holo_orange_light"
                android:orientation="horizontal"/>

        </LinearLayout>

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/floatingButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="16dp"
            android:clickable="true"
            android:src="@drawable/ic_done"
            app:layout_anchor="@id/viewOne"
            app:layout_anchorGravity="bottom|right|end"
            app:backgroundTint="#FF0000"
            app:rippleColor="#FFF" />

    </android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

您可以在http://www.ahotbrew.com/android-floating-action-button/找到android studio项目的完整示例.