Как программно изменить оттенок кнопки ниже уровня API 23 на Android
Я пытаюсь понять, как программно изменить цвет drawableLeft/drawableRight кнопки. Я использовал оттягиваемый оттенок в моем xml, как упомянуто ниже, который работает> уровень API 23, но не могу изменить цвет <уровень API 23
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="VIEW ALL"
android:layout_centerInParent="true"
android:background="#00000000"
android:drawableLeft="@mipmap/ic_menu_black_36dp"
android:layout_centerVertical="true"
android:id="@+id/view_all"
android:textColor="@color/bottom_color"
android:drawableTint="@color/bottom_color"
/>
Button prev = (Button) findViewById(R.id.prev);
Drawable[] drawables =prev.getCompoundDrawables();
drawables[0].setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY);
prev.setCompoundDrawables(drawables[0],null,null,null);
Решение:
Drawable[] drawablesprev =prev.getCompoundDrawables();
//for drawableleft drawable array index 0
drawablesprev[0].setColorFilter(getResources().getColor(R.color.assessment_bottom), PorterDuff.Mode.SRC_ATOP);
//for drawableright drawable array index 2
drawablesprev[2].setColorFilter(getResources().getColor(R.color.assessment_bottom), PorterDuff.Mode.SRC_ATOP);
//for drawabletop drawable array index 1
drawablesprev[1].setColorFilter(getResources().getColor(R.color.assessment_bottom), PorterDuff.Mode.SRC_ATOP);
5 ответов
Ты используешь PorterDuff.Mode.MULTIPLY
так что вы умножаете цвета. при условии (имя вашего рисования) ваш значок черный - #000000
или как int
это будет 0
, затем 0 * GRAY
(или любой другой цвет) всегда даст вам 0
так еще черный...
попробуй другой PorterDuff.Mode
s, например PorterDuff.Mode.SRC_ATOP
или же PorterDuff.Mode.SRC_IN
Ваш текущий код, вероятно, будет работать с белой версией иконки, которая должна быть MULTIPLY
Вот быстрый способ подкрасить ваш TextView или кнопку Drawable:
private void tintViewDrawable(TextView view) {
Drawable[] drawables = view.getCompoundDrawables();
for (Drawable drawable : drawables) {
if (drawable != null) {
drawable.setColorFilter(getResources().getColor(R.color.colorPrimary), PorterDuff.Mode.SRC_ATOP);
}
}
}
Если вы предпочитаете использовать XML -код вместо JAVA , вы можете изменить
android:drawableTint
приписывать
app:drawableTint
.
Для котлина это работает для меня
your_view.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP)
Или если вы используете ресурс
your_view.setColorFilter(ContextCompat.getColor(this.baseContext, R.color.colorPrimary), PorterDuff.Mode.SRC_ATOP)
_BTNCancel.getBackground().setAlpha(128);
это сделает кнопку или любой вид 50% оттенком