Google 是否已经为这个新的圆形 FAB 按钮发布了定义的样式或组件,还是我应该自己实现设计?
该按钮在此处描述:Google Design | 浮动操作按钮
编辑(05/2015):检查Lukas 的回答/ Gabriele 的回答,展示了一种使用设计支持库实现它的简单方法。
Google 是否已经为这个新的圆形 FAB 按钮发布了定义的样式或组件,还是我应该自己实现设计?
该按钮在此处描述:Google Design | 浮动操作按钮
编辑(05/2015):检查Lukas 的回答/ Gabriele 的回答,展示了一种使用设计支持库实现它的简单方法。
更新时间:26/08/2021
使用android 的 Material 组件添加到您的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.
}
});
如果您使用Theme.MaterialComponents.*
主题,您的 FAB 将继承材料样式。否则只需应用样式@style/Widget.MaterialComponents.FloatingActionButton
<com.google.android.material.floatingactionbutton.FloatingActionButton
style="@style/Widget.MaterialComponents.FloatingActionButton"
../>
更多信息在这里。
使用Jetpack 组合 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")
}
更新:2015 年 5 月 30 日,带有官方设计支持库
现在有一个官方小部件。
只需将此依赖项添加到您的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
}
});
文档Android 文档。
更新:2014 年 2 月 12 日,使用 Android 5 代码
您还可以将stateListAnimator添加到您的 Button:
<Button
android:stateListAnimator="@anim/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>
Dimens.xml 是
<resources>
<dimen name="fab_size">56dp</dimen>
<dimen name="button_elevation">2dp</dimen>
<dimen name="button_press_elevation">4dp</dimen>
</resources>
检查丹尼尔的答案。
关于 Daniele 提到的大纲。将海拔属性添加到您的 Button,并通过代码设置大纲:
<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);
}
}
更新:现在有一个 FAB 的官方小部件:FloatingActionButton,有关完整信息,请参阅 Gabriele Mariotti 回复。
根据 Adam Powell 和 Chet Haase 的说法,他们没有为 FAB 按钮创建小部件,因为它是一个非常容易复制的组件。
在 Google IO 2014 演讲“Google I/O 2014 - Material science: Developing Android applications with material design”中有一个问题,在演讲的最后(大约 37:50)有这个问题,你可以听到它在这里: https ://www.youtube.com/watch?v=lSH9aKXjgt8#t=2280
Chet Haase 说有一个 RoundedBitmapDrawable(我没有检查是否是这个名字)应该已经完成了定义大纲的工作。
但是你可以用你自己的drawable来做,设置一个Elevation并以编程方式定义一个圆形轮廓。
这应该会在 L 释放时为您提供带有阴影的圆形按钮。但我认为你必须自己构建 Shadow pre-L。
我应该检查 CardView 的代码,看看它是如何重现阴影 pre-L 的。我可能会这样做,但现在没有时间。如果没有人弹出详细信息,我会在我找到时间去检查之后再做。
编辑:
Gabriele Mariotti(请参阅下面的答案,谢谢)添加了一些代码来向您展示如何做到这一点。
感谢@shomeser 的评论,他编写了一个库来制作fab 按钮:
https://github.com/shamanland/floating-action-button
要使用它:
dependencies {
compile 'com.shamanland:fab:0.0.3'
}
您还可以阅读他对另一个问题的回答:如何在两个小部件/布局之间添加新的“浮动操作按钮”
Google 现在提供了一个官方库,称为设计库,其中包含 Fab Button。只需添加以下 Gradle 依赖项:
compile 'com.android.support:design:22.2.0'
之后,您可以像这样使用 fab 按钮:
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
更多信息可以在他们的公告中找到
http://android-developers.blogspot.ch/2015/05/android-design-support-library.html
或在 javadoc 页面上
http://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
由于标签 FAB 功能(如在 Evernote 或 Inbox 应用程序中)已添加到这个很棒的库中,请随意使用它:
摇篮依赖:
compile 'com.getbase:floatingactionbutton:1.3.0'
布局.xml:
<com.getbase.floatingactionbutton.FloatingActionsMenu
android:id="@+id/multiple_actions"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
fab:fab_addButtonColorNormal="@color/white"
fab:fab_addButtonColorPressed="@color/white_pressed"
fab:fab_addButtonPlusIconColor="@color/half_black"
fab:fab_labelStyle="@style/menu_labels_style"
android:layout_marginBottom="16dp"
android:layout_marginRight="16dp"
android:layout_marginEnd="16dp">
<com.getbase.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
fab:fab_colorNormal="@color/white"
fab:fab_title="Action A"
fab:fab_colorPressed="@color/white_pressed"/>
<com.getbase.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
fab:fab_colorNormal="@color/white"
fab:fab_title="Action B"
fab:fab_colorPressed="@color/white_pressed"/>
</com.getbase.floatingactionbutton.FloatingActionsMenu>
menu_labels_style.xml:
<style name="menu_labels_style">
<item name="android:background">@drawable/fab_label_background</item>
<item name="android:textColor">@color/white</item>
</style>
fab_label_background.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/black_semi_transparent"/>
<padding
android:left="16dp"
android:top="4dp"
android:right="16dp"
android:bottom="4dp"/>
<corners
android:radius="2dp"/>
</shape>
享受!