Я использую библиотеку поддержки дизайна Google для Android. Для того, чтобы установить цвет кнопки, отличный от темы приложения Я объявляю кнопки в макете файл XML следующим образом:Установите buttonColorNormal программно для кнопки Android с эффектом дизайна AppCompat
<Button
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/MyButton" />
А затем определить MyButton в styles.xml, как
<style name="MyButton" parent="ThemeOverlay.AppCompat">
<item name="colorButtonNormal">@color/my_color</item>
</style>
Это дает мне предоставляется кнопка в соответствии с библиотекой поддержки дизайна, причем цвет фона совпадает с цветом @color/my_color
в моем файле colors.xml.
Следовательно, в основном используется android:theme
, чтобы изменить атрибут colorButtonNormal
, чтобы получить желаемый цвет.
Как я могу достичь того же результата программно? В принципе, если бы я мог сделать что-то вроде
myButton.setTheme(R.style.MyButton)
... тогда я мог бы установить colorButtonNormal
, чтобы получить представление.
Я не могу установить его как
myButton.setBackgroundColor(ContextCompat.getColor(getContext(),R.color.my_color));
или даже не как
ColorStateList colorStateList = ContextCompat.getColorStateList(getActivity(), R.color.my_color);
ViewCompat.setBackgroundTintList(myButton, colorStateList);
Это позволит удалить библиотеку эффект для поддержки проектов осязания.
Вы попробовали использовать setBackgroundTintList? – JEY
@JEY Последовал за документом, но он не работал. Обновлен вопрос для справки. – Tejas
. Лучше всего создать кнопку программно с помощью одного из этих конструкторов: Button (Контекст, AttributeSet, int defStyleAttr) Кнопка (Контекст AttributeSet int defStyleAttr, int defStyleRes) – JEY