プログラムでボタンの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);
PorterDuff.Mode.MULTIPLY
を使用しているので、色を掛けています。 (ドローアブルの名前)を仮定すると、アイコンは黒です-#000000
またはint
としては0
になります。その場合、0 * GRAY
(または他の色)は常に0
を与えるので、まだ黒です...
他のPorterDuff.Mode
sを試してください。例: PorterDuff.Mode.SRC_ATOP
またはPorterDuff.Mode.SRC_IN
現在のコードは、おそらくMULTIPLY
で適切に色付けされている白いバージョンのアイコンで機能します。
TextViewまたはButtonドローアブルに色を付ける簡単な方法は次のとおりです。
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);
}
}
}
Kotlinの場合、これは私にとってはうまくいきます
your_view.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP)
または、リソースを使用する場合
your_view.setColorFilter(ContextCompat.getColor(this.baseContext, R.color.colorPrimary), PorterDuff.Mode.SRC_ATOP)