Czy możliwe jest zastosowanie barwienia do rysowania dla api <21?
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_calendar"
android:tint="@color/primary" />
Działa dobrze, ale tylko na urządzeniach z API21. Jakieś obejście dla urządzeń z niższym interfejsem API lub obsługi AppCompat? Nic nie mogę znaleźć.
AppCompatImageView
dokumentów:This will automatically be used when you use ImageView in your layouts. You should only need to manually use this class when writing custom views.
developer.android.com/reference/android/support/v7/widget/… Tak więc użycie normalnegoImageView
układu powinno działać dobrze.Możesz to osiągnąć za pomocą kodu źródłowego. Wcześniej barwienie nie było obsługiwane przez
DrawableCompat
. Zaczynając od biblioteki wsparcia 22.1 możesz to zrobić, ale musisz to zrobić w ten sposób:źródło
ContextCompat.getColor()
zamiastgetResources().getColor()
.Czy nie mógłbyś po prostu użyć ImageView do wyświetlenia swojego Drawable?
android:tint
działa dobrze na starszych poziomach API.<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_calendar" android:tint="@color/primary" />
źródło
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_activated="true" android:drawable="@drawable/ic_home_tinted" /> <item android:drawable="@drawable/ic_home" /> </selector>
Podobne pytanie zadano tutaj: https://stackoverflow.com/a/26533340/950427
Barwienie do rysowania w systemie Android jest obsługiwane tylko w systemie Android 5.0+ (API 21+). (Mówi się „
At the moment this is limited to coloring the action bar and some widgets.
”).I
Źródła:
http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html
https://chris.banes.me/2014/10/17/appcompat-v21/
źródło
ImageView
obsługuje teraz równieżandroid:tint
przez AppCompat, jak w odpowiedzi @ Jonik.AppCompatImageView
, że nieImageView
.Teraz AppCompatImageView, AppCompatButton zastąpi ImageView, Button, aby obsługiwać odcień na urządzeniach z niższym interfejsem API. Sprawdź link, aby uzyskać więcej informacji AppCompatImageView , AppCompatButton
źródło
Do barwienia obrazów możesz użyć
imageView.setColorFilter(int color)
. Działa to z API 8 i działało nad zabarwieniem mojego czarnego obrazu na wybrany kolor. To może zastąpić,setImageTintList()
ale samo użycieandroid:tint
powinno również działać.źródło
Użyj tej NameSpace
xmlns : app = "http://schemas.android.com/apk/res-auto"
a po tym, jak każdy android: tint, możesz zamienić na app: tint. To rozwiąże problem.
źródło
Trochę się spóźniłem, ale oto jak to zrobić.
val textInput = EditText(context) val drawable = ContextCompat.getDrawable(context, R.drawable.your_drawable) drawable?.let { myDrawable -> DrawableCompat.setTint(myDrawable, ContextCompat.getColor(context, R.color.your_color)) textInput.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, myDrawable, null) }
źródło
Zrobi to tak, jak chcesz i powinno działać na wszystkich wersjach biblioteki obsługi systemu Android:
@JvmStatic fun getTintedDrawable(inputDrawable: Drawable, @ColorInt color: Int): Drawable { val wrapDrawable = DrawableCompat.wrap(inputDrawable.mutate()) DrawableCompat.setTint(wrapDrawable, color) DrawableCompat.setTintMode(wrapDrawable, Mode.SRC_IN) return wrapDrawable }
źródło
Jeśli ktoś chce stworzyć nowy drawable (tin1, tint2 ..) spróbuj tego
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/your_image" android:tint="@color/tint_color"> </bitmap>
źródło