web-dev-qa-db-ja.com

android)でプログラムでAPIレベル23より下のボタンの描画可能な色合いを変更する方法

プログラムでボタンの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);
9
user6457240

PorterDuff.Mode.MULTIPLYを使用しているので、色を掛けています。 (ドローアブルの名前)を仮定すると、アイコンは黒です-#000000またはintとしては0になります。その場合、0 * GRAY(または他の色)は常に0を与えるので、まだ黒です...

他のPorterDuff.Modesを試してください。例: PorterDuff.Mode.SRC_ATOPまたはPorterDuff.Mode.SRC_IN

現在のコードは、おそらくMULTIPLYで適切に色付けされている白いバージョンのアイコンで機能します。

0
snachmsm

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);
            }
        }
    }
4
vovahost

Kotlinの場合、これは私にとってはうまくいきます

your_view.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP)

または、リソースを使用する場合

your_view.setColorFilter(ContextCompat.getColor(this.baseContext, R.color.colorPrimary), PorterDuff.Mode.SRC_ATOP)
0
kuzdu