Как подкрасить кнопку, используя последний AppCompat

Мне нужно знать, каков наилучший (и рекомендуемый) способ подкрашивания кнопки материала (AppCompatButton) с использованием последней версии AppCompat (23.2.1 на данный момент). Я никогда не мог предположить, что это будет так расстраивать! Я попробовал большинство ответов отсюда, но либо они не сработали, либо работали с неожиданными результатами.

Мне нужно сохранить обратную совместимость с api >= 9 И просто нужно, чтобы волновой эффект применялся к>=21 ничего особенного. Так какой же самый лучший путь до сих пор?

Я был бы признателен, если бы вы могли предоставить как XML, так и Java-код.

1 ответ

Решение

Есть много способов сделать это. Мой любимый следующий:

<Button
 android:id="@+id/activity_main_some_button"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 style="@style/Widget.AppCompat.Button.Colored"
 android:text="This is a button" />  

Это автоматически окрашивает кнопку тем цветом, который вы (надеюсь) задали в своей теме, сохраняя при этом нажатые состояния в API = Lollipop.

Если больше ничего не работает, вы можете просто подкрасить кнопку самостоятельно:

AppCompatButton myExampleButton = new AppCompatButton(getContext());

myExampleButton.setSupportBackgroundTintList(ContextCompat.getColorStateList(getContext(),
                                             R.color.some_color));

Обновить

Вы можете сделать следующее, чтобы использовать самостоятельно определенный цвет:

<style name="MyButtonTheme" parent="Widget.AppCompat.Button.Colored">
    <item name="colorButtonNormal">@color/someColor</item>
</style>

Определите новый стиль с желаемым цветом.

<Button
 android:id="@+id/activity_main_some_button"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:theme="@style/MyButtonTheme"
 android:text="This is a button" />

Установите его на свою кнопку.

Другие вопросы по тегам