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

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

版面宽高设置为:

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">

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

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

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

【问题讨论】:

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

标签: java android xml mobile user-interface


【解决方案1】:

我花了很长时间才找到这个,但按钮中文本周围的“填充”根本不是真正的填充。默认的 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>

【讨论】:

  • 我在宽度方面遇到了类似的问题。设置 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_width="wrap_content"
    android:layout_height="wrap_content"
    

    【讨论】:

    • 如果您阅读原始问题的内容,这根本不起作用
    【解决方案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_width="match_parent"
            android:layout_height="wrap_content"
            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_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" />
    

    输出:

    【讨论】:

      猜你喜欢
      • 2011-08-31
      • 2012-07-07
      • 2020-05-22
      • 1970-01-01
      • 2020-08-06
      • 2013-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多