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

在我的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>

在预览和在手机上,它看起来是这样的:

.

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

我怎么能摆脱它,让按钮完全填满底部区域?

164627 次浏览

这不是填充,这是按钮周围的阴影在它的背景可绘制。创建你自己的背景,它就会消失。

一种变通方法可能是尝试使用-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值,这使它消失。这对我很管用。希望这对你有用。

我刚接触机器人,但我也遇到过类似的情况。我做了什么@Delyan建议,也使用android:background=“@null”在xml布局文件。

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

在Button元素上,添加:

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

或者在你的按钮样式中:

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

它似乎不是填充,边缘,或minheight/width。 设置android:background="@null"按钮将失去其触摸动画,但事实证明,将背景设置为任何东西都可以修复该边界


我目前正在与:

minSdkVersion 19
targetSdkVersion 23

在按钮的XML集android:includeFontPadding="false"

我有同样的问题,似乎是因为按钮的背景颜色。试着把背景色换成另一种颜色,例如:

android:background="@color/colorActive"

看看它是否有效。然后你可以定义一个样式,如果你想要按钮使用。

为了移除切换按钮周围的填充,我们需要设置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"
/>

将可绘制文件设置为按钮属性,如: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>

这不是一个填充,而是或背景阴影可绘制或minHeightminWidth的问题。

如果你仍然想要漂亮的涟漪效果,你可以使用?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"
... />

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

你也可以用layout_width(height)参数来做。

例如:我已经用android:layout_height="18dp"代码删除了顶部和底部空间。

标准按钮不应该在全宽中使用,这就是为什么你会遇到这种情况。

背景

如果你看一下材质设计-按钮样式,你会看到一个按钮有一个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的按钮? < / > < / p >

我的解决方案是将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"/>

经过几个小时的深入研究,我终于找到了一个解决方案,不使用不同的元素,操纵minHeightminWidth,甚至包装Button围绕RelativeLayout

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

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

改变前景可以让你两全其美:去掉“看不见的”填充,保留按钮的设计。

你可以像下面这样在AppCompatButton中使用无边界的样式。并使用android:背景

风格= " @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" />

输出:

enter image description here

删除顶部和底部填充

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

对于MaterialButton,添加下面的属性,它将完美地工作

<android.support.design.button.MaterialButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:insetTop="0dp"
android:insetBottom="0dp"/>

对于<androidx.appcompat.widget.AppCompatButton>

           <androidx.appcompat.widget.AppCompatButton
.
.
android:minHeight="0dp"
android:minWidth="0dp"
>


</androidx.appcompat.widget.AppCompatButton>

以编程方式删除AppCompatButton填充:

button.setPadding(0, 0, 0, 0)
button.minHeight = 0
button.minimumHeight = 0

您可以通过将其inset设置为零来实现这一点。

android:insetBottom="0dp"
android:insetTop="0dp"
Add these properties:


android:insetTop="0dp"
android:insetBottom="0dp"
android:minWidth="0dp"
android:minHeight="0dp"
android:padding="0dp"

为我工作过:)

   android:insetTop="0dp"
android:insetBottom="0dp"
android:minWidth="0dp"
android:minHeight="0dp"
android:padding="0dp"