Złe wiadomości
Jak mówi BoD, zabarwienie tła przycisku w Lollipop 5.0 (poziom API 21) nie ma sensu.
Dobre wieści
Wydaje się, że Lollipop 5.1 (poziom API 22) naprawił ten problem, zmieniając btn_mtrl_default_shape.xml (między innymi): https://android.googlesource.com/platform/frameworks/base/+/6dfa60f33ca6018959ebff1efde82db7d2aed1e3%5E!/#F
Wspaniała wiadomość
Nowa biblioteka obsługi (wersja 22.1+) dodaje obsługę odcieni kompatybilną wstecz do wielu komponentów, w tym AppCompatButton !
Niestety android:backgroundTint
właściwość nadal nie działa (może robię coś źle) - więc musisz ustawić ColorStateList
kod używając setSupportBackgroundTintList()
. Byłoby naprawdę miło widzieć android:backgroundTint
wsparcie w przyszłości. Aktualizacja : Marcio Granzotto skomentował, że app:backgroundTint
działa na AppCompatButton! Zauważ, że tak app:
nie jest android:
, ponieważ znajduje się w aplikacji / bibliotece.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<AppCompatButton
android:id="@+id/mybutton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="Testing, testing"
app:backgroundTint="#ff00ff"/>
</LinearLayout>
Twoja aktywność automatycznie zawyżnie wartość AppCompatButton
zamiast normalnej, Button
jeśli pozwolisz jej dziedziczyć AppCompatActivity
.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AppCompatButton v = (AppCompatButton) findViewById(R.id.mybutton);
ColorStateList csl = new ColorStateList(new int[][]{new int[0]}, new int[]{0xffffcc00});
v.setSupportBackgroundTintList(csl);
}
}
Powinieneś oczywiście pobrać ColorStateList
z zasobu koloru, ale byłem leniwy, więc ...
Aha, i nie zapomnij oprzeć motywu aplikacji na jednym z Theme.AppCompat
motywów, w przeciwnym razie widoki kompatybilności będą bardzo, bardzo smutne ...;)
To zadziałało zarówno na 2.3.7 (Gingerbread MR1), jak i 5.0 (Lollipop „Classic”).