如何在Android中删除按钮周围的填充?


184

在我的Android应用中,我具有以下布局:

<?xml version="1.0" encoding="utf-8" ?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical">

    <fragment
         android:id="@+id/map"
         android:layout_width="match_parent"
         android:layout_height="0dp" 
         android:layout_weight="1" 
         class="com.google.android.gms.maps.SupportMapFragment"/>

    <Button
        android:id="@+id/button_back"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="CloseActivity"
        android:padding="0dp"
        android:text="@+string/back" />

</LinearLayout>

在预览中和在电话上,它看起来像:

正如您在底部区域的按钮上看到的那样,那里有一些填充。

如何消除这种情况,让按钮完全填满底部区域?


6
DATerre的答案已经正确了两年。你可以这样标吗?
JohnnyLambada '16

1
这个问题需要编辑才能有更好的标题。尽管它并未真正回答问题,但它已成为Google搜索的第一个结果。
SOFe

Answers:


432

对我来说,问题出在某些Android主题上是minHeight和minWidth。

在Button元素上,添加:

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

或按您按钮的样式:

<item name="android:minHeight">0dp</item>
<item name="android:minWidth">0dp</item>

5
花了一段时间,直到我意识到我不是在处理一些奇怪的填充行为,而是在处理minHeight。
Pijusn 2014年

7
我认为这个答案根本无法回答原始问题。但是我仍然很高兴遇到它,因为我不知道为什么Button即使设置了我仍然占用这么多空间android:background="@null"Button默认样式负责的事实是一个很好的提示。
2014年

重要的是,请同时使用android:minHeight =“ 0dp” android:minWidth =“ 0dp”,而不是仅使用其中之一。
里卡多

这样可以从Android Nougat上的按钮上删除圆角和波纹效果,不知道是什么原因导致了这种现象?
rraallvv

这个答案解决了一个GridLayout的问题,当我试图让更多的按钮适合行/列时,该GridLayout包含带有autoSize选项的按钮。简单的答案让我花了很长时间才找到...
Mike Hanafey

71

我的解决方案将insetTop和insetBottom属性设置为0。

<android.support.design.button.MaterialButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:insetTop="0dp"
        android:insetBottom="0dp"
        android:text="@string/view_video"
        android:textColor="@color/white"/>

1
这也为我解决了问题!谢谢!
SPM

46

这不是填充,而是背景可绘制区域中按钮周围的阴影。创建您自己的背景,它将消失。


6
是的 没有消失。
hasan 2014年

如何测量尺寸?
伊曼·阿克巴里

@Behr就是这样,将背景更改为按钮的颜色
Ramon

我刚刚意识到我的背景图像具有透明的填充
水果

22

一种变通方法是尝试-ve为边距使用值,如下所示:

<Button
    android:id="@+id/button_back"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:onClick="CloseActivity"
    android:padding="0dp"
    android:layout_marginLeft="-5dip"
    android:layout_marginRight="-5dip"
    android:layout_marginTop="-5dip"
    android:layout_marginBottom="-5dip"
    android:text="@string/back" />

它将使该空间消失。我的意思是您可以选择适当的dip值,这样就可以消除它。它为我工作。希望对你有效。


4
使用此解决方案时我会小心。它所做的只是使用负边距隐藏按钮背景(边框+阴影)。什么是样式更改,并且边框+阴影需要的时间超过5dp?为了安全起见,我宁愿使用Delyan / Casey Murray解决方案。
lenrok258 '16

另外,Android上不正式支持负利润,因此我也避免这样做
Tim Kist

13

要删除切换按钮周围的填充,我们需要设置minWidth和minHeight 0dp。android:minWidth="0dp" android:minHeight="0dp"

  <ToggleButton
        android:id="@+id/toggle_row_notifications"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minWidth="0dp"
        android:minHeight="0dp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:padding="@dimen/_5sdp"
        android:textOn=""
        android:textOff=""
        android:background="@android:color/transparent"
        android:button="@drawable/toggle_selector"
        />

将您的可绘制文件设置为button属性,例如: android:button="@drawable/toggle_selector"

下面是我的toggle_selecter.xml文件

<?xml version="1.0" encoding="utf-8"?>
     <selector xmlns:android="http://schemas.android.com/apk/res/android">
            <item android:drawable="@drawable/notifications_toggle_on" 
                  android:state_checked="true"/>
            <item android:drawable="@drawable/notifications_toggle_off" 
                  android:state_checked="false"/>
     </selector>

9

我是android新手,但我也遇到类似情况。我做了@Delyan的建议,并且还在xml布局文件中使用了android:background =“ @ null”。



6

我遇到了同样的问题,似乎是因为按钮的背景色。尝试将背景色更改为另一种颜色,例如:

android:background="@color/colorActive"

看看是否可行。然后,如果要使用按钮,则可以定义样式


这将删除按钮的突出显示/动画功能。
Altus

4

这不是填充,而是背景可绘制的阴影或minHeightand 的问题minWidth

如果您仍然想要很好的涟漪影响,则可以使用以下按钮制作自己的按钮样式?attr/selectableItemBackground

<style name="Widget.AppTheme.MyCustomButton" parent="Widget.AppCompat.Button.Borderless">
    <item name="android:minHeight">0dp</item>
    <item name="android:minWidth">0dp</item>
    <item name="android:layout_height">48dp</item>
    <item name="android:background">?attr/selectableItemBackground</item>
</style>

并将其应用于按钮:

<Button 
    style="@style/Widget.AppTheme.MyCustomButton"
    ... />

4

删除顶部和底部填充

<com.google.android.material.button.MaterialButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minHeight="0dp"//to effect the following parameters, this must be added!
        android:insetTop="0dp"
        android:insetBottom="0dp"/>

删除左右填充

<com.google.android.material.button.MaterialButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minWidth="0dp"//to effect the following parameters, this must be added!
        android:insetLeft="0dp"
        android:insetRight="0dp"/>

2

它似乎不是填充,边距或最小高度/宽度。设置android:background="@null"按钮会丢失其触摸动画,但事实证明,将背景设置为任何东西都可以修复该边框。


我目前正在与:

minSdkVersion 19
targetSdkVersion 23

1

给您的按钮一个自定义背景:@ drawable / material_btn_blue



0

不应将标准按钮用于全宽,这就是您遇到这种情况的原因。

背景

如果你看看 材质设计-按钮样式”,您将看到按钮的高度单击区域为48dp,但由于某些原因,该按钮将显示为36dp的高度。

这是您看到的背景轮廓,不会覆盖按钮本身的整个区域。
它具有圆角和一些填充,应该可以单独单击,包装其内容,并且不能跨越屏幕底部的整个宽度。

如上所述,您想要的是不同的背景。不是标准按钮,而是具有这种良好波纹效果的可选项目的背景。

对于此用例,有一个?selectableItemBackground主题属性,您可以将其用作背景(尤其是在列表中)。
它将添加平台标准波纹(或<21上的某些颜色状态列表),并将使用您当前的主题颜色。

对于您的用例,您可能只使用以下内容:

<Button
    android:id="@+id/sign_in_button"
    style="?android:attr/buttonBarButtonStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Login"
    android:background="?attr/selectableItemBackground" />
                   <!--  /\ that's all -->

如果您的视图是唯一一个覆盖整个屏幕的视图,则也无需添加布局权重

如果您对背景的外观有不同的想法,则必须自己创建自定义可绘制对象,并在其中管理颜色和状态。

这个答案是从问题中复制的如何在Android中正确删除按钮周围的填充(或边距?)?


0

经过周围挖多个答案的时间,我终于发现,不使用不同的元素,操作的解决方案minHeight或者minWidth,甚至包裹Button周围RelativeLayout

<Button
    android:foreground="?attr/selectableItemBackground"
    android:background="@color/whatever" />

这里的主要要点是前景的设置,而不是许多答案所规定的背景。将背景本身更改为selectableItemBackground只会覆盖您对按钮的颜色/背景所做的任何更改(如果有)。

更改前景可为您提供两全其美的体验:摆脱“不可见”的填充并保留按钮的设计。


0

您可以在AppCompatButton中使用无边框样式,如下所示。并使用android:background

style =“ @ style / 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.