Ho riscontrato questo problema con ICS / JB perché i pulsanti predefiniti per il tema Holo sono costituiti da immagini leggermente trasparenti. Per uno sfondo questo è particolarmente evidente.
Gingerbread vs. ICS +:
Copiare tutti gli stati e le immagini disegnabili per ogni risoluzione e rendere solide le immagini trasparenti è un problema, quindi ho optato per una soluzione più sporca: avvolgere il pulsante in un supporto con uno sfondo bianco. Ecco un drawable XML grezzo (ButtonHolder) che fa esattamente questo:
Il tuo file 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>
.
.
.
Tuttavia, questo si traduce in un bordo bianco perché le immagini del pulsante Holo includono i margini per tenere conto dello spazio premuto:
Quindi la soluzione è dare allo sfondo bianco un margine (4dp ha funzionato per me) e angoli arrotondati (2dp) per nascondere completamente il bianco e rendere solido il pulsante:
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>
Il risultato finale è simile al seguente:
Dovresti scegliere come target questo stile per v14 + e modificarlo o escluderlo per Gingerbread / Honeycomb perché le dimensioni dell'immagine del pulsante nativo sono diverse da ICS e JB (ad esempio, questo stile esatto dietro un pulsante Gingerbread si traduce in un po 'di bianco sotto il pulsante).