2016-09-21 3 views
0

Фон моего фреймворка указан с помощью выделенного xml, и я хочу изменить цвет этих элементов с помощью кода. У другого управления в Android, похоже, есть разные способы установить свой цвет.Как изменить цвет рамки, указанной в xml?

<Checkbox android:button="@drawable/custom_checkbox" /> 

В растяжимой/custom_checkbox.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" android:drawable="@drawable/checked" /> 
    <item android:state_checked="false" android:drawable="@drawable/unchecked" /> 
</selector> 

Большинство ответов на SO останавливается на указанном выше растворе. Я могу изменить цвет с помощью следующего кода, но этот код не будет работать на определенном уровне API (например, на уровне 17). Я хотел бы что-то, что работает по всем направлениям.

Drawable d = DrawableCompat.wrap(checkbox.getBackground()); 
DrawableCompat.setTint(d, newColor); 
+0

Возможный дубликат [Android, TabLayout значок цвет не изменяется при перемещении] (HTTP: // StackOverflow. com/questions/39475790/android-tablayout-icon-color-doesnt-change-when-dragging) –

+0

Я не верю, что это дубликат. Я спрашиваю о флажке, а не вкладке. Решение также имеет слой-список в своем примере, которого я не знаю. – Boon

+0

Да, это так. Принятый ответ в этом потоке показывает, как отображать состояние, доступное на всех уровнях API. –

ответ

0

Возможно, this поможет вам.

и я думаю, что это: android:buttonTint="@color/mybrown" простой способ

+0

Это решение не будет работать для уровня API 17 (или, возможно, ничего ниже уровня API 21). – Boon

0

попробовать это:

Drawable d = DrawableCompat.wrap(checkbox.getBackground()); 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     DrawableCompat.setTint(d, newColor); 

    } else { 
     d.mutate().setColorFilter(newColor, PorterDuff.Mode.SRC_IN); 
    } 
Смежные вопросы