如何减少 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
的默认样式为insetBottom
和insetTop
,其值为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"
【讨论】:
那是按钮外的填充。我追求的效果是让按钮框架更接近“登录”文本。谢谢。 那已经是按钮的内边距了。您可能需要检查是否在<shape />
的父视图中添加了android:padding
或android: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 按钮对象中文本周围的内部填充?的主要内容,如果未能解决你的问题,请参考以下文章