如何将materialButton图标设置在中心

时间:2018-08-01 12:17:29

标签: android material-components

我正在使用 supportLibrary =“ 28.0.0-beta01” 版本。
这是我在.xml文件中的代码:

<android.support.design.button.MaterialButton
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:icon="@drawable/ic_my_orders"
    app:iconGravity="textStart"
    android:gravity="center"/>

到我的代码图标位于按钮左侧的可绘制位置。我想将按钮设置在中间。 我想达到这个结果 enter image description here


编辑

我不需要任何自定义视图或硬编码的东西。如果是bug(app:iconGravity),我将等待下一个版本。

编辑

28.0.0-rc01 版本中修复的错误,只需更改版本即可。

4 个答案:

答案 0 :(得分:5)

使用材料组件库,只需使用 app:iconGravity="textStart" 属性:

 <com.google.android.material.button.MaterialButton
        style="@style/Widget.MaterialComponents.Button.Icon"
        app:icon="@drawable/..."
        app:iconGravity="textStart"
        ../>

enter image description here

如果您想偷工减料,请使用 app:shapeAppearanceOverlay 属性:

 <com.google.android.material.button.MaterialButton
        style="@style/Widget.MaterialComponents.Button.Icon"
        app:icon="@drawable/..."
        app:iconGravity="textStart"
        app:shapeAppearanceOverlay="@style/Button.Cut"
        ../>

具有:

  <style name="Button.Cut" parent="">
    <item name="cornerFamily">cut</item>
    <item name="cornerSize">4dp</item>
  </style>

enter image description here

答案 1 :(得分:3)

原始问题中的代码段是正确的。该漏洞已被识别为漏洞,并将在即将发布的版本中修复。

答案 2 :(得分:2)

您可以使用width来wrap_content,使其与您的文本匹配。然后使用layout_gravity而不是gravity来设置按钮自身的重力(而不是其子级)。

<android.support.design.button.MaterialButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:icon="@drawable/ic_my_orders"
    app:iconGravity="textStart"
    android:layout_gravity="center"/>

答案 3 :(得分:0)

已更新

尝试使用此代码设置按钮的左填充以使其居中。

 <android.support.design.button.MaterialButton
    android:id="@+id/material_button"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:gravity="center_vertical|start"
    android:text="CENTER"
    android:textColor="@android:color/white"
    app:icon="@drawable/ic_location_on_accent_24dp"
    app:layout_constraintBottom_toBottomOf="parent" />

JAVA

 final MaterialButton button = root_view.findViewById(R.id.material_button);
 button.post(new Runnable() {
        @Override
        public void run() {

            int width = button.getWidth();
            button.measure(0,0);
            int paddingleft = (width - button.getMeasuredWidth() + 50)/2; //50 drawable width
            button.setPadding(paddingleft,0,0,0);
        }
    });

输出
enter image description here