安卓 L - 浮动操作按钮 (FAB)

Google是否已经为此新的圆形FAB按钮发布了定义的样式或组件,或者我应该自己实现设计吗?

按钮描述如下:Google Design |浮动操作按钮

编辑(05/2015):检查Lukas的答案/Gabriele的答案,显示使用设计支持库实现它的简单方法。


答案 1

已更新: 26/08/2021

使用 Android 的材料组件添加到您的 :build.gradle

implementation 'com.google.android.material:material:1.x.x'

然后添加您的布局:

<com.google.android.material.floatingactionbutton.FloatingActionButton
      android:id="@+id/floating_action_button"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="bottom|right"
      android:layout_margin="16dp"
      app:srcCompat="@drawable/ic_plus_24"/>

并使用它:

FloatingActionButton floatingActionButton =
    (FloatingActionButton) findViewById(R.id.floating_action_button);    
floatingActionButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        // Handle the click.
    }
});

如果您使用的是主题,则FAB将继承材质样式。否则只需应用样式Theme.MaterialComponents.*@style/Widget.MaterialComponents.FloatingActionButton

<com.google.android.material.floatingactionbutton.FloatingActionButton
    style="@style/Widget.MaterialComponents.FloatingActionButton"
    ../>

更多信息请点击这里


喷气背包组合使用:1.0.x

//Simple FAB
FloatingActionButton(onClick = { /* .. */ } ) {
    Icon(Icons.Filled.Add,"contentDescription")
}

//FAB custom color
FloatingActionButton(
    onClick = { /* .. */ },
    backgroundColor = Color.Blue,
    contentColor = Color.White
){
    Icon(Icons.Filled.Add,"contentDescription")
}

enter image description here


更新时间:30/05/2015,包含官方设计支持库

现在有一个官方小部件。

只需将此依赖项添加到您的build.gradle

compile 'com.android.support:design:22.2.0'

将此视图添加到布局中:

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end|bottom"
    android:src="@drawable/ic_done" />

并使用它:

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               //TODO
            }
        });

文档安卓文档


更新: 02/12/2014 与安卓 5 代码

您也可以将列表动画器添加和状态到您的按钮:

<Button
 android:stateListAnimator="@anim/anim"
/>

其中动画.xml是:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_enabled="true"
        android:state_pressed="true">
        <objectAnimator
            android:duration="@android:integer/config_shortAnimTime"
            android:propertyName="translationZ"
            android:valueFrom="@dimen/button_elevation"
            android:valueTo="@dimen/button_press_elevation"
            android:valueType="floatType" />
    </item>
    <item>
        <objectAnimator
            android:duration="@android:integer/config_shortAnimTime"
            android:propertyName="translationZ"
            android:valueFrom="@dimen/button_press_elevation"
            android:valueTo="@dimen/button_elevation"
            android:valueType="floatType" />
    </item>
</selector>

迪门斯.xml是

<resources>
    <dimen name="fab_size">56dp</dimen>
 
    <dimen name="button_elevation">2dp</dimen>
    <dimen name="button_press_elevation">4dp</dimen>
</resources>

检查丹尼尔的答案。

关于丹尼尔提到的大纲。将高程属性添加到按钮,并通过代码设置轮廓

   <ImageButton
        android:background="@drawable/ripple"
        android:stateListAnimator="@anim/anim"
        android:src="@drawable/ic_action_add"
        android:elevation="4dp"
        />

关于大纲:

public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layoutfab);
        
        //Outline: OLD METHOD IN L-PREVIEW
        //int size = getResources().getDimensionPixelSize(R.dimen.fab_size);
        //Outline outline = new Outline();
        //outline.setOval(0, 0, size, size);
        //findViewById(R.id.fab).setOutline(outline);

        Button fab = (Button) findViewById(R.id.fab);
        ViewOutlineProvider viewOutlineProvider = new ViewOutlineProvider() {
           @Override
           public void getOutline(View view, Outline outline) {
              // Or read size directly from the view's width/height
              int size = getResources().getDimensionPixelSize(R.dimen.fab_size);
              outline.setOval(0, 0, size, size);
           }
        };
        fab.setOutlineProvider(viewOutlineProvider);
    }
    
}

enter image description here


答案 2

更新:现在有一个FAB的官方小部件:FloatingActionButton,请参阅Gabriele Mariotti回复以获取完整信息。

根据Adam Powell和Chet Haase的说法,他们没有为FAB按钮创建一个小部件,因为它是一个非常容易重现的组件。

在Google IO 2014演讲“Google I / O 2014 - 材料科学:用材料设计开发Android应用程序”中有一个问题,在演讲结束时(大约37:50)有一个问题,你可以在这里听到:https://www.youtube.com/watch?v=lSH9aKXjgt8#t=2280

Chet Haase说,有一个RoundedBitmapDrawable(我没有检查这是否是名字),它应该已经完成了定义大纲的工作。

但是,您可以使用自己的可绘制对象执行此操作,为其设置“高程”,并以编程方式定义圆“轮廓”。

这应该给你圆形按钮,在L释放时有阴影。但我认为你必须自己构建Shadow pre-L。

我应该检查CardView的代码,看看它是如何重现前L的阴影的。我可能会这样做,但现在没有时间。如果没有人提出细节,我会在抽出时间去检查之后再做。

编辑:

Gabriele Mariotti(请参阅下面的答案,谢谢)添加了一些代码来向您展示如何做到这一点。

多亏了@shomeser的评论,他写了一个库来制作fab按钮:

https://github.com/shamanland/floating-action-button

要使用它:

dependencies {
    compile 'com.shamanland:fab:0.0.3'
}

您还可以阅读他对另一个问题的回答:如何在两个小部件/布局之间添加新的“浮动操作按钮”


推荐