Me he encontrado con este problema con ICS / JB porque los botones predeterminados para el tema Holo consisten en imágenes que son ligeramente transparentes. Para un fondo esto es especialmente notable.
Pan de jengibre vs. ICS +:
Copiar sobre todos los estados e imágenes dibujables para cada resolución y hacer que las imágenes transparentes sean sólidas es un dolor, así que he optado por una solución más sucia: envuelva el botón en un soporte que tenga un fondo blanco. Aquí hay un crudo XML dibujable (ButtonHolder) que hace exactamente eso:
Su archivo 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>
.
.
.
Sin embargo, esto da como resultado un borde blanco porque las imágenes del botón Holo incluyen márgenes para tener en cuenta el espacio presionado:
Entonces, la solución es darle un margen al fondo blanco (4dp funcionó para mí) y esquinas redondeadas (2dp) para ocultar completamente el blanco y hacer que el botón sea sólido:
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>
El resultado final se ve así:
Debe orientar este estilo para v14 + y ajustarlo o excluirlo para Gingerbread / Honeycomb porque sus tamaños de imagen de botón nativos son diferentes de los de ICS y JB (por ejemplo, este estilo exacto detrás de un botón de Gingerbread da como resultado un poco de blanco debajo del botón).