Wystąpił ten problem z ICS / JB, ponieważ domyślne przyciski motywu Holo składają się z obrazów, które są nieco przezroczyste. W tle jest to szczególnie zauważalne.
Piernik vs. ICS +:
Kopiowanie wszystkich możliwych do rysowania stanów i obrazów dla każdej rozdzielczości i utrwalanie przezroczystych obrazów jest uciążliwe, więc wybrałem brudniejsze rozwiązanie: zawiń przycisk w uchwycie, które ma białe tło. Oto prymitywny rysunek XML (ButtonHolder), który robi dokładnie to:
Twój plik 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>
.
.
.
Powoduje to jednak powstanie białej ramki, ponieważ obrazy przycisku Holo zawierają marginesy uwzględniające naciśnięcie spacji:
Rozwiązaniem jest więc nadanie białemu tłu marginesu (4 dp dla mnie zadziałało) i zaokrąglonych rogów (2dp), aby całkowicie ukryć biel, a jednocześnie sprawić, że przycisk będzie solidny:
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>
Wynik końcowy wygląda następująco:
Powinieneś celować w ten styl dla wersji 14 + i dostosować go lub wykluczyć w przypadku Gingerbread / Honeycomb, ponieważ ich natywne rozmiary przycisków różnią się od ICS i JB (np. Ten dokładny styl za przyciskiem Gingerbread skutkuje niewielką ilością bieli poniżej przycisku).