如何正确删除Android中按钮周围的填充(或边距?)?

目前,我有以下底部登录按钮。

未按下按钮时

enter image description here

按下按钮时

enter image description here

XML 如下所示

<LinearLayout
    android:background="?attr/welcomeBottomNavBarBackground"
    android:orientation="horizontal"
    android:id="@+id/sign_in_bottom_nav_bar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true">
    <Button
        style="?android:attr/buttonBarButtonStyle"
        android:id="@+id/sign_in_button"
        android:layout_width="0dp"
        android:width="0dp"
        android:layout_weight="1.0"
        android:layout_height="48dp"
        android:gravity="center"
        android:layout_gravity="center"
        android:enabled="true"
        android:textAllCaps="true"
        android:text="@string/log_in" />
</LinearLayout>

我想删除填充(或者我应该称之为边距?请参考我最底部最下面的p / s部分)周围的按钮,当它被按下时。

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

我试过

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

它不起作用,也没有效果。


我进一步尝试

<Button
    ...
    ...
    android:background="@null"
    android:minHeight="0dp"
    android:minWidth="0dp" />

按下时不再有填充。但是,设计的材料压制视觉效果也会消失。

我是否可以知道在按下时去除按钮衬垫的最佳方法是什么,同时保留材料设计的压制视觉效果?

P/S

我真的不知道我应该称之为填充还是边距。我希望实现的是,当我们按下底部区域时,按压视觉效果的变化应该覆盖整个100%底部栏区域(),而不是目前95%的底部栏区域。@+id/sign_in_bottom_nav_bar


答案 1

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

背景

如果您看一下材质设计 - 按钮样式,您将看到按钮具有48dp高度的单击区域,但对于...一些原因。

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

溶液

如上所述,您想要的是不同的背景。不是标准按钮,而是具有这种漂亮涟漪效果的可选项目的背景。

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

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

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

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

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


答案 2

很简单,请使用如下属性:inset

android:insetTop="0dp"
android:insetBottom="0dp"
android:insetRight="0dp"
android:insetLeft="0dp"

推荐