【问题标题】:How to make custom size of FloatingActionButton如何使 FloatingActionButton 的自定义大小
【发布时间】:2015-11-23 20:42:55
【问题描述】:

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

来自 xml 的app:fabSize 参数变成了FloatingActionButton 类中的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 资源吗?

【问题讨论】:

  • 它是最终的,因为它遵循材料指南
  • 究竟是什么准则禁止扩展 getSizeDimension?什么意思?
  • 设计库遵循材料指南,这是因为您只能使用2维。检查google.com/design/spec/components/…

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


【解决方案1】:

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"
    />

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

【讨论】:

    【解决方案2】:

    您可以按照以下方式设置自定义尺寸

    **根据自己设置高度或宽度match_parent和另一个**

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

    【讨论】:

      【解决方案3】:

      由于支持库 27.1.0,因此有一个 attribute

      只需设置app:fabCustomSize

      【讨论】:

        【解决方案4】:

        您可以通过这种方式定义您的自定义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
        这样您就无需重新定义可能影响应用其他部分的资源。

        【讨论】:

          【解决方案5】:

          因为我不使用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"
                  />
          

          【讨论】:

          • fab正常时类似design_fab_size_normal,不是mini
          猜你喜欢
          • 2019-03-18
          • 2019-02-26
          • 2016-12-31
          • 1970-01-01
          • 2021-04-09
          • 2019-10-09
          • 2022-01-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多