如何自定义 FloatingActionButton 的大小
How to make custom size of FloatingActionButton
FloatingActionButton 默认有两种大小(正常和迷你)。我需要另一个(比平常大)。
来自 xml 的 app:fabSize
参数成为 FloatingActionButton
class 中的 private int mSize;
变量。实际大小将由这个函数决定:
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);
}
}
因为它声明为 final 我不能扩展它。有任何想法吗?我可以在我的应用程序中重新定义 dimen.fab_size_mini
资源吗?
因为我没有使用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"
/>
您可以通过这种方式定义您的自定义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
您可以定义设置乘数。
这样您就不需要重新定义可能影响应用程序其他部分的资源。
自从支持库 27.1.0 以来,有一个 attribute:
只需设置app:fabCustomSize
您可以通过以下方式设置自定义尺寸
**设置高度或宽度match_parent并根据自己设置另一个**
<android.support.design.widget.FloatingActionButton
android:id="@+id/addPhoto"
android:layout_width="match_parent"
android:layout_height="80dp"
/>
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"
/>
我希望这会对某人有所帮助。
FloatingActionButton 默认有两种大小(正常和迷你)。我需要另一个(比平常大)。
来自 xml 的app:fabSize
参数成为 FloatingActionButton
class 中的 private int mSize;
变量。实际大小将由这个函数决定:
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);
}
}
因为它声明为 final 我不能扩展它。有任何想法吗?我可以在我的应用程序中重新定义 dimen.fab_size_mini
资源吗?
因为我没有使用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"
/>
您可以通过这种方式定义您的自定义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
您可以定义设置乘数。
这样您就不需要重新定义可能影响应用程序其他部分的资源。
自从支持库 27.1.0 以来,有一个 attribute:
只需设置app:fabCustomSize
您可以通过以下方式设置自定义尺寸
**设置高度或宽度match_parent并根据自己设置另一个**
<android.support.design.widget.FloatingActionButton
android:id="@+id/addPhoto"
android:layout_width="match_parent"
android:layout_height="80dp"
/>
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"
/>
我希望这会对某人有所帮助。