drawableLeft图标和文本之间的Android MaterialButton填充

Posted

技术标签:

【中文标题】drawableLeft图标和文本之间的Android MaterialButton填充【英文标题】:Android MaterialButton padding between drawableLeft icon and text 【发布时间】:2021-12-12 21:48:00 【问题描述】:

正如题目所说,用materialButton,我想设置drawableLeft图标和文字的距离,我不想用icon,只用drawableLeft

默认情况下,drawableleft 图标离文本很远,​​我想让它们更近,但我不能使用图标和图标重力。如果我使用图标和图标重力,由于我使用的样式,它不会显示,但是如果我改变样式,那么就会出现另一个问题:按钮下方会有阴影。我不想要阴影,所以我必须使用样式。

我想要的是一个MaterialButton,灰色背景,左图标,中心是文字,图标和文字是封闭的,MaterialButton是圆角,MaterialButton下方没有阴影。到目前为止的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.button.MaterialButton
xmlns:android="http://schemas.android.com/apk/res/android"              
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/btnShortCut"
style="@style/Button"
android:layout_
android:layout_
android:orientation="vertical"
android:layout_marginRight="10dp"
app:backgroundTint="@color/background"
app:cornerRadius="@dimen/cornerM"
app:strokeColor="@color/primaryGrey"
app:strokeWidth="0.5dp"
android:padding="5dp"
android:textColor="@color/secondaryText"
android:textSize="@dimen/fontBody" >

</com.google.android.material.button.MaterialButton>

<style name="Button" parent="Widget.MaterialComponents.Button.UnelevatedButton">
    <item name="android:textAllCaps">false</item>
    <item name="android:insetTop">0dp</item>
    <item name="android:insetBottom">0dp</item>
    <item name="android:gravity">center</item>
    <item name="android:padding">0dp</item>
</style>

【问题讨论】:

您可以使用android:layout_marginLeft 将drawableLeft 推到更靠近文本的位置,并在drawable 和文本之间保留一些空间(例如,在使用重心的情况下)您可以使用android:drawablePadding,测试一下,让我知道 要移除按钮的阴影,请将其添加到它style="?android:attr/borderlessButtonStyle" 你可以使用 app:iconPadding 【参考方案1】:

你有必要使用材质按钮吗?您是否考虑过使用 FrameLayout 并在其上重叠了 textview?

在您的示例中,它看起来像这样,但进行了一些修改,因为我不确定您希望它看起来如何。

<FrameLayout
  android:id="@+id/btnShortCut"
  android:layout_
  android:layout_
  android:layout_marginRight="10dp" 
  android:orientation="vertical"                                                                
  android:gravity="center"
  app:cornerRadius="@dimen/cornerM"
  app:strokeColor="@color/primaryGrey"
  app:strokeWidth="0.5dp"
  android:padding="5dp">

    <TextView
      android:layout_gravity="center"
      android:layout_
      android:layout_
      android:layout_marginStart="15dp"
      android:layout_marginEnd="15dp"
      android:drawableStart="@drawable/<your icon here>"
      android:drawablePadding="15dp"
      android:textColor="@color/secondaryText"
      android:textSize="@dimen/fontBody"/>
</FrameLayout>

【讨论】:

谢谢你,但不,我需要使用材料按钮,因为公司要求我这样做。

以上是关于drawableLeft图标和文本之间的Android MaterialButton填充的主要内容,如果未能解决你的问题,请参考以下文章

以JSONobject形式提交http请求

将文本保留在 TextView 中,drawableLeft 居中

Android中单选框RadioButton的基本用法

如何将宽度设置为“填充父项”的android按钮中的图标和文本居中

自定义 AppCompatButton drawableLeft?

2023/3/8每日总结