如何减少 Android 按钮对象中文本周围的内部填充?

Posted

技术标签:

【中文标题】如何减少 Android 按钮对象中文本周围的内部填充?【英文标题】:How do I reduce the inner padding around the text within an Android button object? 【发布时间】:2013-04-29 22:38:13 【问题描述】:

所以,目前我有一个按钮,看起来像上面的第一张图片。如何减少按钮本身内文本周围的填充(看起来更像第二张图片)?

版面宽高设置为:

android:layout_
android:layout_

自定义样式形状有参数"

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" android:padding="10dp">

剩下的只是颜色属性和半径值。

为了清楚起见,我希望按钮的框架更靠近“登录”文本。

非常感谢所有帮助和反馈。谢谢。

【问题讨论】:

android:padding="10dp 减少 10 dp 到 5dp 这与按钮的外部填充有关。我指的是“登录”及其容器的内部填充。不过还是谢谢。 这对我有帮助 - ***.com/a/19227057/3325759(作者 - @StinePike)来自答案 - 添加android:includeFontPadding="false" 覆盖填充对我有用。 textView.setPadding(0,0,0,0); 将 android:minHeight="0dp" android:minWidth="0dp" 放入按钮中。这应该工作.. 【参考方案1】:

我花了很长时间才找到这个,但按钮中文本周围的“填充”根本不是真正的填充。默认的 Widget.Button 样式包括一个 minHeight 属性。更改按钮上的 minHeight 将允许您按预期调整填充。

<Button
        android:id="@+id/header"
        android:layout_
        android:layout_
        android:text="@string/test"
        android:textColor="@color/black"
        android:minHeight="40dip"/>


<style name="Widget.Holo.Button" parent="Widget.Button">
    <item name="android:background">@android:drawable/btn_default_holo_dark</item>
    <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
    <item name="android:textColor">@android:color/primary_text_holo_dark</item>
    <item name="android:minHeight">48dip</item>
    <item name="android:minWidth">64dip</item>
</style>

【讨论】:

我在宽度方面遇到了类似的问题。设置 android:minWidth="0dp" 有效,但是在带有长文本的按钮上,我需要设置 android:paddingRight 和 android:paddingLeft 以防止布局不佳。 我的 Widget.Button 没有 minHeight (sdk28) 属性在主题按钮上,而不是父“Widget.Button”。如果您使用的主题与“holo”不同,它可能位于不同的位置。以下是“holo”的样式android.googlesource.com/platform/frameworks/base/+/master/core/… 它仍然有填充与MaterialButton,高度无关,如果你设置height 48dp和minHeight 48dp你仍然会看到填充,按钮背景高度会小于48dp 它是 insets android:insetTop="0dp" android:insetBottom="0dp",然后它最终会移除 padding 并且背景按钮高度将为 48dp【参考方案2】:

在材质组件库中,MaterialButton 的默认样式为insetBottominsetTop,其值为6dp

您可以在布局中更改它们:

  <com.google.android.material.button.MaterialButton
      android:insetTop="0dp"
      android:insetBottom="0dp"
      ../>

或风格:

 <style name="Button_no_insets" parent="Widget.MaterialComponents.Button"..>
    <item name="android:insetTop">0dp</item>
    <item name="android:insetBottom">0dp</item>
 </style>

【讨论】:

【参考方案3】:

在您的自定义 shape.xml 文件中尝试此操作

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="1dp"
android:padding="1dp">

您也可以更改按钮的 xml

android:layout_
android:layout_

【讨论】:

如果您阅读原始问题的内容,这根本不起作用【参考方案4】:

如果您想要更小的顶部和底部填充,请使用:

 android:paddingTop="2dp"
 android:paddingBottom="2dp"

【讨论】:

那是按钮外的填充。我追求的效果是让按钮框架更接近“登录”文本。谢谢。 那已经是按钮的内边距了。您可能需要检查是否在&lt;shape /&gt; 的父视图中添加了android:paddingandroid:layout_margin" 之类的行。【参考方案5】:

更新:如果你想使用Material Button:>

您可以使用 style="@style/Widget.MaterialComponents.Button.TextButton" 属性,将 insetTop & insetBottom 设置为 0dp。还设置 app:cornerRadius="0dp" 以获得与我给定图片相同的结果。

  <com.google.android.material.button.MaterialButton
        android:id="@+id/btnAddMorePassenger"
        style="@style/Widget.MaterialComponents.Button.TextButton"
        android:layout_
        android:layout_
        android:backgroundTint="@color/primary_variant"
        android:insetTop="0dp"
        android:insetBottom="0dp"
        android:text="@string/add_passenger"
        android:textColor="@color/light"
        android:visibility="visible"
        app:cornerRadius="0dp"
        app:icon="@drawable/ic_profile_24dp"
        app:iconGravity="textStart"
        app:iconTint="@color/light"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/toolbar"
        tools:visibility="visible" />

您可以在 AppCompatButton 中使用 Borderless 样式,如下所示。还可以使用您喜欢的背景颜色。

Widget.AppCompat.Button.Borderless.Colored

按钮代码

<androidx.appcompat.widget.AppCompatButton
        android:id="@+id/button_visa_next"
        android:background="@color/colorPrimary"
        style="@style/Widget.AppCompat.Button.Borderless.Colored"
        android:layout_
        android:layout_
        android:layout_marginTop="@dimen/spacing_normal"
        android:text="@string/next"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

输出:

【讨论】:

以上是关于如何减少 Android 按钮对象中文本周围的内部填充?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jQuery在元素的内部文本的最后一个单词周围包裹一个范围?

如何在 UI 按钮/文本标签中的字母周围制作边框?

将文本垂直放置在按钮内 - 减少边距?

如何正确删除Android中按钮周围的填充(或边距?)?

减少按钮内的文本填充

使用自动布局减少文本字段周围的空间