J'ai rencontré ce problème avec ICS / JB car les boutons par défaut du thème Holo sont constitués d'images légèrement transparentes. Pour un fond, cela est particulièrement visible.
Pain d'épice vs ICS +:
Copier sur tous les états et images dessinables pour chaque résolution et rendre les images transparentes solides est une douleur, j'ai donc opté pour une solution plus sale: enveloppez le bouton dans un support qui a un fond blanc. Voici un dessin XML brut (ButtonHolder) qui fait exactement cela:
Votre fichier 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>
.
.
.
Cependant, cela entraîne une bordure blanche car les images du bouton Holo incluent des marges pour tenir compte de l'espace pressé:
La solution consiste donc à donner au fond blanc une marge (4dp travaillé pour moi) et des coins arrondis (2dp) pour masquer complètement le blanc tout en rendant le bouton solide:
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>
Le résultat final ressemble à ceci:
Vous devez cibler ce style pour v14 +, et l'ajuster ou l'exclure pour Gingerbread / Honeycomb car leurs tailles d'image de bouton natives sont différentes des ICS et JB (par exemple, ce style exact derrière un bouton Gingerbread entraîne un petit peu de blanc sous le bouton).