Погані новини
Як каже BoD, безглуздо тонувати фон кнопки в Lollipop 5.0 (рівень API 21).
Хороша новина
Lollipop 5.1 (рівень API 22), схоже, виправив це, змінивши btn_mtrl_default_shape.xml (серед інших файлів): https://android.googlesource.com/platform/frameworks/base/+/6dfa60f33ca6018959ebff1efde82db7d2aed1e3%5E0F5
Чудова новина
Нова бібліотека підтримки (версія 22.1+) додає зворотну сумісну підтримку тонування для багатьох компонентів, включаючи AppCompatButton !
На жаль, android:backgroundTint
властивість все ще не працює (можливо, я роблю щось не так) - тому вам доведеться встановити ColorStateList
код in, використовуючи setSupportBackgroundTintList()
. Було б дуже приємно бачити android:backgroundTint
підтримку в майбутньому. Оновлення : Марсіо Гранзотто прокоментував, що app:backgroundTint
працює на AppCompatButton! Зверніть увагу, що це app:
ні android:
, тому що це в додатку / бібліотеці.
<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>
Ваша активність автоматично роздується AppCompatButton
замість звичайної, Button
якщо ви дозволите їй успадковувати від 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);
}
}
Звичайно, вам слід отримати ColorStateList
з кольорового ресурсу, але я лінувався, тому ...
О, і не забувайте базувати тему програми на одній з Theme.AppCompat
тем, інакше погляди порівняння будуть дуже, дуже сумними ...;)
Це працювало як на версії 2.3.7 (Gingerbread MR1), так і на 5.0 (Lollipop 'Classic').