如何将没有文本的 MaterialButton 中的图标居中?
How to center icon in a MaterialButton which has no text?
我使用的是最新版本的 com.google.android.material:material
库(即 1.1.0-alpha03
),并且我有一个 MaterialButton
定义的图标,如下所示:
我希望 MaterialButton
呈现为正方形,图标居中,但 MaterialButton
呈现如下:
如果我将 iconGravity
值更改为 "textStart"
,则 MaterialButton
呈现如下:
图标的位置略有改进,但图标仍然有点偏离中心。如果我将 insetLeft
、insetRight
、insetTop
和 insetBottom
值更改为 0dp
,则 MaterialButton
呈现如下:
这是对按钮形状的改进,但图标仍然有点偏离中心。
任何人都知道我是否可以做些进一步的事情来使图标在 MaterialButton
中居中?
找到了。我缺少的属性是 app:iconPadding="0dp"
.
因此,根据我的实验,创建正方形 MaterialButton
所需的最少属性如下:
<com.google.android.material.button.MaterialButton
android:layout_width="52dp"
android:layout_height="52dp"
android:insetLeft="0dp"
android:insetTop="0dp"
android:insetRight="0dp"
android:insetBottom="0dp"
app:icon="@drawable/icon_next"
app:iconGravity="textStart"
app:iconPadding="0dp" />
这些属性产生一个 MaterialButton
如下:
您的按钮上还有一个 Icon
版本的 material 样式。对于您正在使用的填充按钮,您可以将样式设置为 Widget.MaterialComponents.Button.Icon
.
将 iconGravity 更改为 textStart 并将 iconPadding 更改为 0dp
app:iconPadding="0dp"
android:padding="0dp"
app:iconGravity="textStart"
将此样式添加到按钮
<Button style="@style/Widget.App.Button.IconOnly"/>
然后在res/values/styles.xml
中添加以下内容
<style name="Widget.App.Button.IconOnly" parent="Widget.MaterialComponents.Button">
<item name="iconPadding">0dp</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
<item name="android:paddingLeft">12dp</item>
<item name="android:paddingRight">12dp</item>
<item name="android:minWidth">48dp</item>
<item name="android:minHeight">48dp</item>
</style>
我注意到 app:iconGravity="textStart"
在我将 appcompat
更新到版本 1.4.0
后停止工作。
我现在使用 app:iconGravity="textTop"
使用Widget.Material3.Button.IconButton
风格
<com.google.android.material.button.MaterialButton
style="@style/Widget.Material3.Button.IconButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:icon="@drawable/ic_baseline_power_settings_new_24"
app:backgroundTint="?android:attr/colorButtonNormal"
android:layout_gravity="center"
/>
我使用的是最新版本的 com.google.android.material:material
库(即 1.1.0-alpha03
),并且我有一个 MaterialButton
定义的图标,如下所示:
我希望 MaterialButton
呈现为正方形,图标居中,但 MaterialButton
呈现如下:
如果我将 iconGravity
值更改为 "textStart"
,则 MaterialButton
呈现如下:
图标的位置略有改进,但图标仍然有点偏离中心。如果我将 insetLeft
、insetRight
、insetTop
和 insetBottom
值更改为 0dp
,则 MaterialButton
呈现如下:
这是对按钮形状的改进,但图标仍然有点偏离中心。
任何人都知道我是否可以做些进一步的事情来使图标在 MaterialButton
中居中?
找到了。我缺少的属性是 app:iconPadding="0dp"
.
因此,根据我的实验,创建正方形 MaterialButton
所需的最少属性如下:
<com.google.android.material.button.MaterialButton
android:layout_width="52dp"
android:layout_height="52dp"
android:insetLeft="0dp"
android:insetTop="0dp"
android:insetRight="0dp"
android:insetBottom="0dp"
app:icon="@drawable/icon_next"
app:iconGravity="textStart"
app:iconPadding="0dp" />
这些属性产生一个 MaterialButton
如下:
您的按钮上还有一个 Icon
版本的 material 样式。对于您正在使用的填充按钮,您可以将样式设置为 Widget.MaterialComponents.Button.Icon
.
将 iconGravity 更改为 textStart 并将 iconPadding 更改为 0dp
app:iconPadding="0dp"
android:padding="0dp"
app:iconGravity="textStart"
将此样式添加到按钮
<Button style="@style/Widget.App.Button.IconOnly"/>
然后在res/values/styles.xml
中添加以下内容
<style name="Widget.App.Button.IconOnly" parent="Widget.MaterialComponents.Button">
<item name="iconPadding">0dp</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
<item name="android:paddingLeft">12dp</item>
<item name="android:paddingRight">12dp</item>
<item name="android:minWidth">48dp</item>
<item name="android:minHeight">48dp</item>
</style>
我注意到 app:iconGravity="textStart"
在我将 appcompat
更新到版本 1.4.0
后停止工作。
我现在使用 app:iconGravity="textTop"
使用Widget.Material3.Button.IconButton
风格
<com.google.android.material.button.MaterialButton
style="@style/Widget.Material3.Button.IconButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:icon="@drawable/ic_baseline_power_settings_new_24"
app:backgroundTint="?android:attr/colorButtonNormal"
android:layout_gravity="center"
/>