我在ICS / JB中遇到了这个问题,因为Holo主题的默认按钮由略微透明的图像组成。对于背景来说,这尤其明显。
Gingerbread与ICS +:
复制每个分辨率的所有可绘制状态和图像,并使透明图像变为实心是很麻烦的,因此我选择了一个更简单的解决方案:将按钮包装在具有白色背景的容器中。 这里有一个粗略的XML drawable(ButtonHolder),可以完美地实现这一点:
您的XML文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/Content">
<RelativeLayout style="@style/ButtonHolder">
<Button android:id="@+id/myButton"
style="@style/Button"
android:text="@string/proceed"/>
</RelativeLayout>
</LinearLayout>
ButtonHolder.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/white"/>
</shape>
</item>
</layer-list>
styles.xml
.
.
.
<style name="ButtonHolder">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:background">@drawable/buttonholder</item>
</style>
<style name="Button" parent="@android:style/Widget.Button">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:textStyle">bold</item>
</style>
.
.
.
然而,这会导致白色边框,因为Holo按钮图像包含边距以考虑按下空间:
所以解决方案是给白色背景加上一个边距(4dp适用于我),并添加圆角(2dp)以完全隐藏白色,并使按钮变得实心:
ButtonHolder.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent"/>
</shape>
</item>
<item android:top="4dp" android:bottom="4dp" android:left="4dp" android:right="4dp">
<shape android:shape="rectangle">
<solid android:color="@color/white"/>
<corners android:radius="2dp" />
</shape>
</item>
</layer-list>
最终效果如下:
![无白色按下](https://istack.dev59.com/LAIpb.webp)
您应该针对 v14+ 的样式进行调整,而对 Gingerbread/Honeycomb 进行调整或排除,因为它们的本地按钮图像尺寸与 ICS 和 JB(例如,在 Gingerbread 按钮后面使用这个确切样式会导致按钮下方留有一小块白色)不同。
android:color
属性。 - Ronbackground
不透明度并不等同于view
的不透明度,在许多情况下都是不同的。 - Jocky Doe