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

时间:2013-07-31 02:27:08

标签: java android button

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

在预览和手机中,它看起来像:

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

如何摆脱它,让按钮完全填满底部区域?

18 个答案:

答案 0 :(得分:351)

对我来说,问题原因是某些Android主题的minHeight和minWidth。

在Button元素上,添加:

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

或按钮的样式:

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

答案 1 :(得分:41)

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

答案 2 :(得分:21)

解决方法可能是尝试将-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值,这样它就会消失。它对我有用。希望它适合你。

答案 3 :(得分:15)

要删除顶部和底部填充

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

答案 4 :(得分:11)

对于MaterialButton,添加以下属性,它将完美运行

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

答案 5 :(得分:11)

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

答案 6 :(得分:11)

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

答案 7 :(得分:8)

我是android的新手,但我有类似的情况。我做了@Delyan建议的,也使用了android:background =&#34; @ null&#34;在xml布局文件中。

答案 8 :(得分:6)

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

android:background="@color/colorActive"

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

答案 9 :(得分:6)

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

答案 10 :(得分:4)

这不是填充,而是背景可绘制的阴影或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"
    ... />

答案 11 :(得分:3)

您应该在按钮中使用minHeightminWidth属性,并确保使用padding

    android:minHeight="0dp"
    android:minWidth="0dp"

答案 12 :(得分:2)

它似乎不是填充,边距或minheight / width。 设置android:background="@null"按钮会丢失其触摸动画,但事实证明,将背景设置为所有修复边框的任何内容。

我目前正在处理:

minSdkVersion 19
targetSdkVersion 23

答案 13 :(得分:0)

为按钮提供自定义背景:@ drawable / material_btn_blue

答案 14 :(得分:0)

您也可以使用Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click TextBox2.Clear() 'No MessageBox appears End Sub Private Sub TextBox2_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles TextBox2.Validating MessageBox.Show("Validating") End Sub 参数来完成此操作。

例如我已经用layout_width(height)代码删除了顶部和底部空间。

答案 15 :(得分:0)

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

背景

如果您查看Material Design - Button Style,则会发现按钮的高度点击区域为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 -->

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

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

  

此答案是从Question: How to properly remove padding (or margin?) around buttons in Android?

复制而来的

答案 16 :(得分:0)

经过数小时的反复研究,我终于找到了一种解决方案,该解决方案不使用其他元素,操纵minHeightminWidth甚至将Button包裹在{{1 }}。

RelativeLayout

这里的主要要点是前景的设置,而不是许多答案所规定的背景。将背景本身更改为<Button android:foreground="?attr/selectableItemBackground" android:background="@color/whatever" /> 只会覆盖您对按钮的颜色/背景所做的任何更改(如果有)。

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

答案 17 :(得分:0)

您可以在 AppCompatButton 中使用 Borderless 样式,如下所示。并使用 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" />

输出:

enter image description here