如何自定义FloatingActionButton的大小

时间:2015-08-29 07:29:48

标签: android android-resources android-design-library

默认情况下,FloatingActionButton有两种尺寸(普通和迷你)。我需要另一个(比正常大)。

来自xml的

app:fabSize参数在private int mSize;类中变为FloatingActionButton变量。实际大小将由此函数决定:

final int getSizeDimension() {
    switch(this.mSize) {
    case 0:
    default:
        return this.getResources().getDimensionPixelSize(dimen.fab_size_normal);
    case 1:
        return this.getResources().getDimensionPixelSize(dimen.fab_size_mini);
    }
}

因为它被宣布为最终我无法扩展它。有任何想法吗?我可以在我的应用中重新定义dimen.fab_size_mini资源吗?

5 个答案:

答案 0 :(得分:12)

因为我没有使用mini尺寸的FAB,所以我重新定义了这个尺寸。

dimens.xml:

<resources>
    <dimen name="design_fab_size_mini">100dp</dimen>
</resources>

layout.xml(第一个FAB将大于第二个):

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/addPhoto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end|bottom"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        app:fabSize="mini"
        android:layout_marginBottom="@dimen/fab_margin_bottom"
        android:layout_marginRight="@dimen/fab_margin_right"
        android:src="@drawable/ic_photo_camera_white_24dp"

        />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/addPicture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end|bottom"
        android:layout_alignParentBottom="true"
        android:layout_toLeftOf="@id/addPhoto"
        android:layout_marginBottom="@dimen/fab_margin_bottom"
        android:layout_marginRight="0dp"
        android:src="@drawable/ic_photo_white_24dp"
        />

答案 1 :(得分:6)

您可以通过这种方式定义自定义FloatingActionButton

public class CustomSizeFloatingActionButton extends FloatingActionButton {

    public CustomSizeFloatingActionButton(Context context) {
        super(context);
    }

    public CustomSizeFloatingActionButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomSizeFloatingActionButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int width = getMeasuredWidth();
        int height = getMeasuredHeight();
        setMeasuredDimension((int) (width * 1.5f), (int) (height * 1.5f));
    }

}

而不是1.5f您可以定义设置乘数 通过这种方式,您无需重新定义可能影响应用程序其他部分的资源。

答案 2 :(得分:4)

自支持库27.1.0起,就有一个attribute

只需设置app:fabCustomSize

答案 3 :(得分:0)

您可以通过以下方式设置自定义尺寸

**设置高度或宽度match_parent并根据自己的需要设置另一个**

<android.support.design.widget.FloatingActionButton
    android:id="@+id/addPhoto"
    android:layout_width="match_parent"
    android:layout_height="80dp"
    />

答案 4 :(得分:0)

MaterialComponents依赖关系中的新版本浮动操作按钮中的问题已解决

使用此:

app:maxImageSize="24dp"
app:fabCustomSize="34dp"

添加此依赖项:

implementation 'com.google.android.material:material:1.1.0'

将AppTheme从AppCompat更改为MaterialComponents以查看效果。

styles.xml

<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:fontFamily">@font/raleway</item>
    </style>

注意:Android项目应在AndroidX中迁移

您必须使用此依赖项

这将在API级别21(API> = 21)以上的设备中工作

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_share"
    android:padding="0dp"
    app:backgroundTint="@color/yellow"
    app:maxImageSize="24dp"
    app:fabCustomSize="34dp"
    />

我希望这会对某人有所帮助。