按钮的填充在没有背景的情况下不起作用

Posted

技术标签:

【中文标题】按钮的填充在没有背景的情况下不起作用【英文标题】:Button's padding is not working without background 【发布时间】:2015-06-23 19:33:18 【问题描述】:

今天我遇到了一个奇怪的布局问题,我还没有从谷歌那里找到任何有用的答案。

在我的布局中,我有一个左侧带有文本的按钮,右侧带有一个图标。我希望文本到按钮边框的左边距为 20dp,然后我将 paddingLeft 设置为按钮,但它不起作用。偶然地,我为按钮设置了背景颜色,填充就像魅力一样。任何人都可以帮我解释一下这件事。

布局如下

<Buttonandroid:layout_
        android:drawableRight="@drawable/right_arrow"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:layout_
        android:text="Button"
        android:id="@+id/btn"
        android:gravity="center_vertical"
        android:fontFamily="roboto regular"
        android:textColor="#ffffff00"
        style="@android:style/Widget.DeviceDefault.Button.Borderless" />

谢谢大家!

【问题讨论】:

你想把按钮和drawable分开吗? 我更新了问题。我希望图标右边距为 20dp,文本左边距为 20dp 到我的按钮边框 我在这个问题中真正需要的是解释为什么在不为按钮设置背景颜色的情况下左侧填充无法工作... 【参考方案1】:

设置 minWidthminHeight 似乎可以让填充和边距在有或没有背景的情况下正常工作。

<Button 
    android:minHeight="0dp"
    android:minWidth="0dp" ...

至于为什么背景对填充的工作方式有任何影响...我认为这与 View.java 中的这段代码有关

protected int getSuggestedMinimumWidth() 
    return (mBackground == null) ? mMinWidth : max(mMinWidth, mBackground.getMinimumWidth());


protected int getSuggestedMinimumHeight() 
    return (mBackground == null) ? mMinHeight : max(mMinHeight, mBackground.getMinimumHeight());

https://***.com/a/20323723/4401507

【讨论】:

【参考方案2】:

你可以试试这个

您可以使用 Textview,而不是使用 Button,它的工作原理与您想要的一样

 <TextView
        android:layout_
        android:layout_
        android:drawableRight="@drawable/right_arrow"
        android:gravity="center_vertical"
        android:text="Button"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:textColor="#ffffff00" />

希望这对你有用。

【讨论】:

"android:padding" 与按钮一起使用,但不是特定的填充(例如 "android:paddingLeft" )。将我的 Button 更改为 TextView 解决了我的问题。谢谢。 谢谢忠告狗。您的“android:padding”评论也为我解决了这个问题,但为什么呢?【参考方案3】:

添加这个

android:drawablePadding="20dp"

【讨论】:

你能添加一个屏幕截图来说明你正在得到什么和你想要什么吗?

以上是关于按钮的填充在没有背景的情况下不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 上的按钮在编辑模式下不起作用

为啥转换在我的情况下不起作用

为啥 wctype.h 中的函数在没有 setlocale() 的情况下不起作用?

为啥这个 if 语句在这种情况下不起作用? [关闭]

AJAX 功能在没有警报的情况下不起作用

NoHandlerFoundException 的自定义异常处理程序在没有 @EnableWebMvc 的情况下不起作用