【问题标题】:How to set Floating Action Button image to fill the button?如何设置浮动操作按钮图像以填充按钮?
【发布时间】:2017-11-13 17:06:44
【问题描述】:

通常为浮动操作按钮设置图标,但我需要设置一个图像,所以我可以制作一个圆形图像。

我将它添加到项目中(使用 Android Studio-> New -> Image Asset),但图像没有填满整个按钮:

我的 xml:

<com.github.clans.fab.FloatingActionMenu
    android:id="@+id/run_menu"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:paddingBottom="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:visibility="visible"
    fab:fab_colorNormal="#DA4336"
    fab:fab_colorPressed="#E75043"
    fab:fab_colorRipple="#99FFFFFF"
    fab:fab_shadowColor="#66000000"
    fab:fab_showShadow="true"
    fab:layout_constraintBottom_toBottomOf="parent"
    fab:layout_constraintHorizontal_bias="0.0"
    fab:layout_constraintLeft_toLeftOf="parent"
    fab:layout_constraintRight_toRightOf="parent"
    fab:layout_constraintTop_toTopOf="parent"
    fab:layout_constraintVertical_bias="0.0"
    fab:menu_backgroundColor="#ccffffff"
    fab:menu_fab_label="Choose an action"
    fab:menu_labels_colorNormal="#333333"
    fab:menu_labels_colorPressed="#444444"
    fab:menu_labels_colorRipple="#66FFFFFF"
    fab:menu_labels_ellipsize="end"
    fab:menu_labels_maxLines="-1"
    fab:menu_labels_position="left"
    fab:menu_labels_showShadow="true"
    fab:menu_labels_singleLine="true"
    fab:menu_openDirection="up"
    android:layout_height="0dp"
    android:layout_width="0dp">

    <com.github.clans.fab.FloatingActionButton
        android:id="@+id/shop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/store"
        fab:fab_label="Store" />

</com.github.clans.fab.FloatingActionMenu>

关于如何解决它的任何想法?应该如何正确制作?

【问题讨论】:

标签: android material-design android-button floating-action-button material-components-android


【解决方案1】:

为 FAB 设置以下属性

android:scaleType="center"

如果这不起作用,请尝试使用属性

app:fabSize="mini"

【讨论】:

  • android:scaleType="center" 使按钮消失 app:fabSize="mini" 没有做任何事情
【解决方案2】:

使用下面的代码

android:scaleType="fitXY"

【讨论】:

    【解决方案3】:

    在 xml 中设置浮动按钮的比例

    android:scaleX="2.0"
    

    或者您可以通过编程方式进行:

    someButton.setScaleX(2.0f);
    someButton.setScaleY(2.0f);
    

    【讨论】:

      【解决方案4】:

      解决方案是将 app:maxImageSize = "56dp" 属性设置为您的 FAB 大小。

      1. 拥有图像或矢量资源,最好是完美的圆形,并且完全适合画布(没有空白边距)。
      2. 了解实际的size of Floating Action Bar (FAB) - 默认 (56 x 56dp) 或迷你 (40 x 40dp)。
      3. XML 代码如下:
      <com.google.android.material.floatingactionbutton.FloatingActionButton
         android:src="@drawable/perfect_fit_circle_image"
         app:maxImageSize="56dp"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" />
      

      【讨论】:

      • 此方法有效,但现在图像更大并且不像父 FAB 那样变成圆形。我该如何解决?
      【解决方案5】:

      如果您要设置圆形 png 图像,解决方法是扩展 floatingActionButton 类,然后覆盖 onMeasure 方法并将 padding 设置为 0,并将 scaleType 设置为 centerCrop

      public class FloatingImageButton extends FloatingActionButton {
      
      
      public FloatingImageButton(Context context) {
          super(context);
      }
      
      public FloatingImageButton(Context context, AttributeSet attrs) {
          super(context, attrs);
      }
      
      @Override
      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
          super.onMeasure(widthMeasureSpec, heightMeasureSpec);
          setPadding(0, 0, 0, 0);
          setScaleType(ScaleType.CENTER_CROP);
      
      
      }
      }
      

      xml 示例

          <com.tabz.app.FloatingImageButton
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/camera_circle"
          android:layout_gravity="bottom|end"
          android:layout_margin="16dp"/>
      

      输出

      【讨论】:

        【解决方案6】:

        使用Material Components library,根据doc,可以使用属性app:maxImageSize

        您可以使用自定义维度,但也可以参考这些定义的维度。

        <dimen name="design_fab_size_mini">40dp</dimen>
        <dimen name="design_fab_size_normal">56dp</dimen>
        

        只需使用:

         <com.google.android.material.floatingactionbutton.FloatingActionButton
                android:id="@+id/fab"
                app:srcCompat="@drawable/ic_add_24px"
                app:maxImageSize="@dimen/design_fab_size_normal"
                ../>
        

        这里是标准尺寸 (&lt;dimen name="design_fab_image_size"&gt;24dp&lt;/dimen&gt;) 和 design_fab_size_normal 的结果。

        【讨论】:

          【解决方案7】:
          1. 通过在 dimens.xml 中添加以下行来覆盖 FAB 中嵌套图像的图像大小尺寸

          &lt;dimen tools:override="true" name="design_fab_image_size"&gt;56dp&lt;/dimen&gt;

               (I used 56dp cause fab size in guidelines is 56dp)
          
          1. 在 FAB 中添加 app:tint="@null"android:scaleType="fitCenter"

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-08-05
            • 1970-01-01
            • 1970-01-01
            • 2016-09-24
            • 2018-11-20
            • 2016-12-10
            相关资源
            最近更新 更多