在我的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>
在预览和在手机上,它看起来是这样的:
正如你在底部区域的按钮上看到的,那里有一些填充。
我怎么能摆脱它,让按钮完全填满底部区域?
为了消除填充左右切换按钮,我们需要设置minWidth和minHeight 0dp。android: minWidth = " 0 dp " android: minHeight = " 0 dp”
<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_selector .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>
这不是填充,而是背景阴影或minHeight和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"
... />
一个标准的按钮不应该在全宽度使用,这就是为什么你会遇到这种情况。
背景
如果你看一下材质设计-按钮样式,你会看到一个按钮有一个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的按钮?
删除顶部和底部填充
<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"/>