FloatingActionButton by default has two sizes (normal and mini). I need another one (bigger than normal).
app:fabSize
parameter from xml became private int mSize;
variable in FloatingActionButton
class. The real size will be determined by this function:
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);
}
}
Because it declared as final I can not extend it. Any ideas? May be I can redefine dimen.fab_size_mini
resource in my app?
Because I don't use FAB of mini
size, I redefined this size.
dimens.xml:
<resources>
<dimen name="design_fab_size_mini">100dp</dimen>
</resources>
layout.xml (first FAB will be bigger than second one):
<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"
/>
You can define your custom FloatingActionButton
in this way
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));
}
}
instead of 1.5f
you can define set your multiplier.
In this way you don't need to redefine resources that may affect other parts of the app.
Since support library 27.1.0 there is an attribute for this:
Just set app:fabCustomSize
You can set custom size by following
**Set either height or width match_parent and another one according to yourself **
<android.support.design.widget.FloatingActionButton
android:id="@+id/addPhoto"
android:layout_width="match_parent"
android:layout_height="80dp"
/>