2016-04-22 2 views
4

У меня возникли проблемы с новым AppCompat 23.3.x и чертежами. Прежде всего, я должен был вернуться назад и удалить:Как оттолкнуть кнопку с помощью appcompat 23.3.0?

vectorDrawables.useSupportLibrary = true 

Поскольку AppCompat вернулась, что так теперь, мое приложение снова генерировать PNG. Хорошо, однако, я тонировал кнопку (drawableTop) таким образом, что полностью перестала работать (для устройств, предшествующих M).

Вот метод, который я использовал:

private void toggleState(boolean checked) { 
    Drawable[] drawables = getCompoundDrawables(); 
    Drawable wrapDrawable = DrawableCompat.wrap(drawables[1]); 
    if (checked) { 
     DrawableCompat.setTint(wrapDrawable.mutate(), ContextCompat.getColor(getContext(), 
       R.color.colorPrimary)); 
     setTextColor(ContextCompat.getColor(getContext(), R.color.colorPrimary)); 
    } else { 
     DrawableCompat.setTint(wrapDrawable.mutate(), ContextCompat.getColor(getContext(), 
       R.color.icon_light_enabled)); 
     setTextColor(ContextCompat.getColor(getContext(), R.color.text_primary_light)); 
    } 
} 

Дело в том, у меня есть пользовательский класс Button, который проверяемый, если флажок установлен, drawableTop и текст имеют разный цвет, что если это не проверено.

Выполнение этой работы (с appcompat 23.2.0), но теперь это не (под Android M). Поверьте мне или нет, но, делая это, когда он достигает setTint, значок больше не виден.

Чтобы заставить его работать, я должен сделать, как следует:

DrawableCompat.setTint(wrapDrawable.mutate(), ContextCompat.getColor(getContext(),R.color.colorPrimary)); 
setCompoundDrawablesWithIntrinsicBounds(null, wrapDrawable, null, null); 

Так каждый раз, когда я подкрасить их, я должен позвонить setCompoundDrawablesWithIntrinsicBounds снова. Это делает все, чтобы работать снова. Тем не менее, я немного обеспокоен тем, что каждый раз настраивать каждый раз. В принципе, мне интересно, есть ли лучший способ или что-то, чего я не вижу.

Я знаю Button имеет setCompoundDrawableTintList который бы дивно, но ее минимальный API соответствует уровню 23.

+0

Какое отношение это имеет к 'VectorDrawable'? – pskink

+1

Я считаю, что вы - это НЕ видно. Замена выталкиваемого тонированным сделала трюк. Спасибо за 'ContextCompat.getColor (getContext(), R.color.colorPrimary)'! –

ответ

5

не хватает репутации сделать комментарий, но я только столкнулся с этим вопросом, а также. Действительно отстой и хорошая вещь, которую я поймал сегодня, а не после выхода.

/** 
* Tinting drawables on Kitkat with DrawableCompat 
* requires wrapping the drawable with {@link DrawableCompat#wrap(Drawable)} prior to tinting it 
* @param view The view containing the drawable to tint 
* @param tintColor The color to tint it. 
*/ 
public static void tintViewBackground(View view, int tintColor) { 
    Drawable wrapDrawable = DrawableCompat.wrap(view.getBackground()); 
    DrawableCompat.setTint(wrapDrawable, tintColor); 
    view.setBackground(wrapDrawable); 
} 

/** 
* Tinting drawables on Kitkat with DrawableCompat 
* requires wrapping the drawable with {@link DrawableCompat#wrap(Drawable)} prior to tinting it 
* @param drawable The drawable to tint 
* @param tintColor The color to tint it. 
*/ 
public static void tintDrawable(Drawable drawable, int tintColor) { 
    Drawable wrapDrawable = DrawableCompat.wrap(drawable); 
    DrawableCompat.setTint(wrapDrawable, tintColor); 
} 

Даже более странно это происходит только на леденец, нормальное поведение наблюдается на KitKat и API 23+.

Смежные вопросы