2017-04-14 20 views
5

içinde programlı olarak api düzeyinin 23 altında bir düğmenin çizilebilir renk tonu nasıl değiştirilir Programlanabilir olarak drawableLeft/drawableRight düğmesinin rengini nasıl değiştireceğimi anlamaya çalışıyorum. çalıştığı aşağıda belirtildiği gibi ben> benim xml çekilebilir tonu kullanmış 23Android

<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); 

Çözüm renk < API seviyesini değiştirmek mümkün API seviyesi 23 değil: böylece PorterDuff.Mode.MULTIPLY kullandığınız

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); 
+0

, "android.support.v4.graphics.drawable.DrawableCompat" ve "setTint (Çizim yapılabilir çizilebilir, int ton)" yöntemini kullanın – pskink

+0

örnek olarak aynı örnek kodu verebilirsiniz. Kinnda burada sıkışıp kaldım, –

+0

neyin içinde sıkışmış? Kodun nedir? – pskink

cevap

0

, Renkleri çarpıyorsunuz. Simgenin siyah (#000000) ya da int olarak kabul edildiğini (olacaktır) kabul edersiniz. o zaman 0 * GRAY (veya başka bir renk) her zaman 0'u verecektir, bu yüzden hala siyah ...

diğer PorterDuff.Mode s, örn. PorterDuff.Mode.SRC_ATOP veya PorterDuff.Mode.SRC_IN

muhtemelen İşte MULTIPLY

+0

kullanın ve getCompoundDrawables kullanarak çalıştı –

0

ile düzgün renkli olmalıdır simgesinin beyaz sürümü ile çalışacak geçerli kod TextView veya Düğme çekilebilir renklendirmek için hızlı bir yoldur:

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