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


89

示例按钮

因此,目前我有一个按钮,看起来像上面的第一个图像。如何减少按钮本身内部文本的填充(看起来更像第二个图像)?

布局的宽度和高度设置为:

android:layout_width="match_parent"
android:layout_height="wrap_content"

自定义样式形状具有参数”

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

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

为了清楚起见,我希望按钮的框架更紧密地拥抱“登录”文本。

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


1
android:padding =“ 10dp将10 dp减少至5dp
Raghunandan

这与按钮的外部填充有关。我指的是“登录”及其容器的内部填充。不过谢谢
Imran)

这帮助我- stackoverflow.com/a/19227057/3325759(作者- @StinePike)从答案-添加android:includeFontPadding="false"
米克利斯Kaneps

覆盖填充对我有用。textView.setPadding(0,0,0,0);
乌斯曼·汗

2
将android:minHeight =“ 0dp” android:minWidth =“ 0dp”放入按钮。这应该工作..
毒蛇

Answers:


232

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

<Button
        android:id="@+id/header"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        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>

6
我在宽度上遇到了类似的问题。设置android:minWidth =“ 0dp”可以,但是在长文本的按钮上,我需要设置android:paddingRight和android:paddingLeft以防止布局不佳。
西蒙·费瑟斯通

我的Widget.Button没有minHeight(sdk28)
ror

该属性位于主题按钮上,而不位于父级“ Widget.Button”上。如果您使用的主题不同于“ holo”,则它可能位于不同的位置。这是“ holo” android.googlesource.com/platform/frameworks/base
史蒂文

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_width="wrap_content"
android:layout_height="wrap_content"

2
如果您阅读了原始的问题,这根本不起作用
Jeremy

1

在材料零件的图书馆,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>

在此处输入图片说明在此处输入图片说明


0

如果您想要较小的顶部和底部填充,请使用以下命令:

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

这是用于按钮外部的填充。我需要的效果是使Button框更紧密地拥抱“ Login”文本。谢谢。
Imran)

1
那已经是按钮的内部填充了。您可能需要检查是否在的父视图中添加了android:padding或的行。android:layout_margin"<shape />
Neoh

0

您可以在AppCompatButton中使用无边界样式,如下所示。也可以使用背景色作为首选。

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_width="0dp"
        android:layout_height="wrap_content"
        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" />

输出:

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.