如何将MaterialButton图标设置到中心

27

我正在使用 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

编辑

我不需要任何自定义视图或硬编码的内容。如果这是个错误(app:iconGravity),我会等待下一个版本发布。

编辑

问题已在版本28.0.0-rc01中得到修复,只需更改版本即可。


1
目前正在发生什么? - Rajshree Tiwari
将您的 MaterialButton 放入另一个 LinearLayout 中,并将 MaterialButton 的宽度设置为 wrap_content - AskNilesh
@MuhammadakbarRafiqov 你正在使用哪个库呢?我使用了implementation 'com.android.support:design:26.1.0',但是没有看到Materialbutton选项。 - Rajshree Tiwari
@MuhammadakbarRafiqov 使用 LinearLayout 并设置 android:layout_width="match_parent",然后在该布局中添加您的 MaterialButton,并将其宽度设置为 wrap_content - AskNilesh
@RajshreeTiwari 'com.android.support:design:28.0.0-beta01' mdc - Muhammadakbar Rafikov
https://dev59.com/71MI5IYBdhLWcg3wCW0o - Sumit Shukla
4个回答

14

你在原问题中提供的代码片段是正确的。这已被确认为一个错误,并将在即将发布的版本中修复。


1
版本“28.0.0-rc01”中的错误已修复。 - Muhammadakbar Rafikov

8
使用Material Components库时,只需要使用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


3

您可以使用 width 属性来包含内容,以使其与文本相匹配。而使用 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"/>

1

更新

尝试使用以下代码设置按钮的左边距,使其居中显示。

 <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);
        }
    });

输出
在此输入图片描述


2
请注意,com.android.support:appcompat-v7:28.0.0-beta01 中不提供 app:additionalPaddingLeftForIcon="100dp"app:additionalPaddingRightForIcon="80dp" - AskNilesh
1
@NileshRathod 我没有注意到我正在使用 implementation 'com.android.support:appcompat-v7:28.0.0-alpha1',谢谢你的信息。 - Mohamed Mohaideen AH
@MuhammadakbarRafiqov 请看我的更新答案,会对你有帮助。 - Mohamed Mohaideen AH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接