android设置背景后为什么按钮变大
Why button gets bigger when the background is set in android
当我使用 xml 中的 android:background
属性为其设置背景时,我遇到了 Button
视图的问题。在设置背景之前,按钮具有默认大小。但是,当我应用一种颜色作为背景时,它会变大,即使我没有在其上设置不同的 width
或 height
。
This is my xml layout before I set background attribute to button
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:background="@color/white"
android:layout_gravity="center_horizontal"
android:id="@+id/btn_row_option_done"
android:text="Done"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:background="@color/white"
android:layout_gravity="center_horizontal"
android:text="Edit"
android:id="@+id/btn_row_option_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:layout_gravity="center_horizontal"
android:text="Delete"
android:id="@+id/btn_row_option_delete"
android:background="@color/red"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:layout_gravity="center_horizontal"
android:text="Cancel"
android:id="@+id/btn_row_option_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
So the cancel button is default size like in screenshot.
但是当我像这样在取消按钮上设置颜色时
<Button
android:background="@color/white"
android:layout_gravity="center_horizontal"
android:text="Cancel"
android:id="@+id/btn_row_option_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
然后按钮变得比默认大小更大,即使我没有使宽度或高度更大。
This is the screenshot
如您所见,取消按钮变大了。实际上我正在设置背景颜色。即使在我设置了背景颜色后,如何修复它以获得默认大小?
这是因为您对宽度和高度使用了换行内容。
您有多种选择。快速简单的方法?设置在 DP 中指定大小的按钮的值,例如:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:background="@color/white"
android:layout_gravity="center_horizontal"
android:id="@+id/btn_row_option_done"
android:text="Done"
android:layout_width="200dp"
android:layout_height="200dp" />
<Button
android:background="@color/white"
android:layout_gravity="center_horizontal"
android:text="Edit"
android:id="@+id/btn_row_option_edit"
android:layout_width="200dp"
android:layout_height="200dp" />
<Button
android:layout_gravity="center_horizontal"
android:text="Delete"
android:id="@+id/btn_row_option_delete"
android:background="@color/red"
android:layout_width="200dp"
android:layout_height="200dp" />
<Button
android:layout_gravity="center_horizontal"
android:text="Cancel"
android:id="@+id/btn_row_option_cancel"
android:layout_width="100dp"
android:layout_height="100dp" />
</LinearLayout>
您必须区分 Button
的大小、宽度和高度、您可以点击的整个区域以及用于显示的 image按钮。
android 上的默认按钮对其可绘制对象应用了填充 - 它看起来更小。它实际上具有相同的大小。
如果您制作自己的可绘制对象并且不应用填充,背景将绘制在视图的 整个 范围内,使其看起来更大。
您始终可以只使用默认按钮,但可以使用 AppCompat 应用您自己的颜色。这支持对默认按钮的背景进行着色。
<android.support.v7.widget.AppCompatButton
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:backgroundTint="#ffaa00"/> <!-- <--- Your color here -->
...这将使您使用相同的外观。
在 XML <Button>
标签中使用 android:backgroundTint
属性。
喜欢:
android:backgroundTint="#6567dc"
无需使用 <android.support.v7.widget.AppCompatButton>
按钮。
对于希望在代码中执行此操作的人(不在 XML 中),您可以使用此:
button.getBackground().setColorFilter(button.getContext().getResources().getColor(R.color.colorAccent), PorterDuff.Mode.MULTIPLY);
这并没有改变按钮的大小,也适用于旧的 android 版本。
讨论了几种方法 here,但这个方法非常有效。
如果您想支持 API 级别 21 以下的任何内容,另一种选择是创建一个自定义可绘制对象,在彩色形状周围使用透明描边。这使您可以灵活地添加块颜色和渐变。
请注意 stroke
和缩小按钮大小的透明度
button_background.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="5dp" />
<padding
android:left="10dp"
android:right="10dp"
android:top="0dp"
android:bottom="0dp"/>
<!-- This is where the magic happens -->
<stroke android:color="#00FF0000" android:width="10dp"/>
<solid android:color="#000000" />
</shape>
按钮
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button_background"
android:text="Click Me"/>
尝试使用此 属性
设置按钮颜色
button.setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));
当我使用 xml 中的 android:background
属性为其设置背景时,我遇到了 Button
视图的问题。在设置背景之前,按钮具有默认大小。但是,当我应用一种颜色作为背景时,它会变大,即使我没有在其上设置不同的 width
或 height
。
This is my xml layout before I set background attribute to button
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:background="@color/white"
android:layout_gravity="center_horizontal"
android:id="@+id/btn_row_option_done"
android:text="Done"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:background="@color/white"
android:layout_gravity="center_horizontal"
android:text="Edit"
android:id="@+id/btn_row_option_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:layout_gravity="center_horizontal"
android:text="Delete"
android:id="@+id/btn_row_option_delete"
android:background="@color/red"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:layout_gravity="center_horizontal"
android:text="Cancel"
android:id="@+id/btn_row_option_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
So the cancel button is default size like in screenshot.
但是当我像这样在取消按钮上设置颜色时
<Button
android:background="@color/white"
android:layout_gravity="center_horizontal"
android:text="Cancel"
android:id="@+id/btn_row_option_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
然后按钮变得比默认大小更大,即使我没有使宽度或高度更大。
This is the screenshot
如您所见,取消按钮变大了。实际上我正在设置背景颜色。即使在我设置了背景颜色后,如何修复它以获得默认大小?
这是因为您对宽度和高度使用了换行内容。
您有多种选择。快速简单的方法?设置在 DP 中指定大小的按钮的值,例如:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:background="@color/white"
android:layout_gravity="center_horizontal"
android:id="@+id/btn_row_option_done"
android:text="Done"
android:layout_width="200dp"
android:layout_height="200dp" />
<Button
android:background="@color/white"
android:layout_gravity="center_horizontal"
android:text="Edit"
android:id="@+id/btn_row_option_edit"
android:layout_width="200dp"
android:layout_height="200dp" />
<Button
android:layout_gravity="center_horizontal"
android:text="Delete"
android:id="@+id/btn_row_option_delete"
android:background="@color/red"
android:layout_width="200dp"
android:layout_height="200dp" />
<Button
android:layout_gravity="center_horizontal"
android:text="Cancel"
android:id="@+id/btn_row_option_cancel"
android:layout_width="100dp"
android:layout_height="100dp" />
</LinearLayout>
您必须区分 Button
的大小、宽度和高度、您可以点击的整个区域以及用于显示的 image按钮。
android 上的默认按钮对其可绘制对象应用了填充 - 它看起来更小。它实际上具有相同的大小。
如果您制作自己的可绘制对象并且不应用填充,背景将绘制在视图的 整个 范围内,使其看起来更大。
您始终可以只使用默认按钮,但可以使用 AppCompat 应用您自己的颜色。这支持对默认按钮的背景进行着色。
<android.support.v7.widget.AppCompatButton
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:backgroundTint="#ffaa00"/> <!-- <--- Your color here -->
...这将使您使用相同的外观。
在 XML <Button>
标签中使用 android:backgroundTint
属性。
喜欢:
android:backgroundTint="#6567dc"
无需使用 <android.support.v7.widget.AppCompatButton>
按钮。
对于希望在代码中执行此操作的人(不在 XML 中),您可以使用此:
button.getBackground().setColorFilter(button.getContext().getResources().getColor(R.color.colorAccent), PorterDuff.Mode.MULTIPLY);
这并没有改变按钮的大小,也适用于旧的 android 版本。 讨论了几种方法 here,但这个方法非常有效。
如果您想支持 API 级别 21 以下的任何内容,另一种选择是创建一个自定义可绘制对象,在彩色形状周围使用透明描边。这使您可以灵活地添加块颜色和渐变。
请注意 stroke
和缩小按钮大小的透明度
button_background.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="5dp" />
<padding
android:left="10dp"
android:right="10dp"
android:top="0dp"
android:bottom="0dp"/>
<!-- This is where the magic happens -->
<stroke android:color="#00FF0000" android:width="10dp"/>
<solid android:color="#000000" />
</shape>
按钮
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button_background"
android:text="Click Me"/>
尝试使用此 属性
设置按钮颜色button.setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));