如何自定义FloatingActionButton的大小

tse*_*tse 13 android android-resources android-design-library

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

app:fabSizexml中的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

tse*_*tse 12

因为我没有使用mini大小的FAB ,所以我重新定义了这个大小.

dimens.xml:

<resources>
    <dimen name="design_fab_size_mini">100dp</dimen>
</resources>
Run Code Online (Sandbox Code Playgroud)

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"
        />
Run Code Online (Sandbox Code Playgroud)


osr*_*srl 7

从支持库27.1.0开始,有一个属性

刚设定 app:fabCustomSize


Rin*_*ino 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));
    }

}
Run Code Online (Sandbox Code Playgroud)

而不是1.5f你可以定义设置你的乘数.
这样,您无需重新定义可能影响应用程序其他部分的资源.