2016-09-11 13 views
3
imgView.setImageTintList(getResources().getColorStateList(R.color.my_clr_selector)); 

それは... コールは、APIレベル21を必要と言うはどのようにAndroidのAPIにsetImageTintList()を使用するには、<21

は、どのように私はそれがAPI 21よりも低いのAndroidデバイス上で動作することができますか?

私はImageView#setColorFilter()を使用して動作させることができますが、ColorStateListを使用して色合いを設定することをお勧めします。

+0

使用を参照してください 'DrawableCompat#setTintList()' – pskink

+0

@pskinkが、getResources()。getColorStateListは – reversiblean

+0

を推奨されていませんし、あなたの代わりに使用するかを知りませんか? – pskink

答えて

14

AppCompatImageViewは、このための後方互換性のサポートを提供していませんが、あなたの代わりにDrawableCompat.setTintList()を使用することができます。

ColorStateList csl = AppCompatResources.getColorStateList(context, R.color.my_clr_selector); 
Drawable drawable = DrawableCompat.wrap(imageView.getDrawable()); 
DrawableCompat.setTintList(drawable, csl); 
imageView.setImageDrawable(drawable); 
+0

'AppCompatResources'はサポートライブラリの24.xで追加されただけです(私は思う)。あなたは以前にいくつかのバージョンで導入された 'ResourcesCompat'を潜在的に使うことができました。 – gnuf

+0

私は可能な限り、 'AppCompatResources'を使用したいと思います。なぜなら、それは' Marshamallow 'デバイスでも 'ColorStateList' XMLで宣言されたテーマ属性を解決することができるからです(http:// www。 androiddesignpatterns.com/2016/08/contextcompat-getcolor-getdrawable.html))。 –

+0

API 21以降は同じだがAPI <21を達成するためには1行のコードしかないので、うまいですが残念です。 'DrawableCompat'や' ViewCompat'ではサポートがありません。 – sud007

4

これはサポート・ライブラリ25.4.0で使用できるようになりました。 Link

ImageViewCompat.setImageTintList(ImageViewの、colorStateList)

+0

'ImageViewCompat'はSDKの最新バージョンでは利用できません。私はそれがそこにあったかどうかも確信していませんが、ドキュメントで言及されています。 – sud007

+1

@ sud007は次のように使用する必要があります: 'ColorStateList csl = AppCompatResources.getColorStateList(act、R.color.colorPrimary); ImageViewCompat.setImageTintList(((ImageView)view.findViewById(R.id.ic_edt)); ' –

+0

@ ArMo372ええ、私はそれをどのように使用するのか知っていますが、そのクラスを見つけることができませんでした。コード。可能であれば、次回に見てコメントします。返信いただきありがとうございます! – sud007

関連する問題