2014-06-19 26 views
16

ben bir Android uygulaması inşa ediyorum ve işlem çubuğunda kullanmak Eylem Çubuğu Simge Paketi simgeleri kullanırız. Ben menu klasördeki xml dosyaları aracılığıyla tanımlar. bir yol hepsi aynı renk olacak şekilde "renklendirmek" Bu simgeler var mı? Şimdiye kadar bir resim düzenleme yazılımı ile manuel olarak yapmak zorunda ama rengini değiştirmeye karar verirseniz, ben baştan yapmak zorunda.Ton menü simgeleri

ImageView için android:tint özniteliği olduğunu biliyorum ama menü simgeleri için kullanmanın bir yolunu bulamadım.

Teşekkür

+0

https://futurestud.io/tutorials/android-quick-tips-8-how-to-dynamically-tint-actionbar-menu-icons mümkün mü Bir 'iconTint' özniteliği ve programlı olarak ilgili çizimde setColorFilter'ı uygulayın. –

cevap

41

Bunu yapmak için daha iyi bir yolu olabilir, ancak bir seçenek kodda simgesini çizmektir.

MenuItem favoriteItem = menu.findItem(R.id.action_favorite); 
Drawable newIcon = (Drawable)favoriteItem.getIcon(); 
newIcon.mutate().setColorFilter(Color.argb(255, 200, 200, 200), PorterDuff.Mode.SRC_IN); 
favoriteItem.setIcon(newIcon); 

Ayrıca Şimdi DrawableCompat gelen gölgelendirme kullanmak yerine edebilirsiniz

newIcon.mutate().setColorFilter(getResources().getColor(R.color.myCustomTint), PorterDuff.Mode.SRC_IN); 
+0

Harika cevap, teşekkürler! –

6

gibi bir renk kaynağı kullanabilirsiniz:

, favori için bir menü öğesi var ve gri tonu istediğinizi varsayalım renk filtresi:

MenuItem favoriteItem = menu.findItem(R.id.action_favorite); 
Drawable favoriteIcon = DrawableCompat.wrap(favoriteItem.getIcon()); 
ColorStateList colorSelector = ResourcesCompat.getColorStateList(getResources(), R.color.tinted_selector, getTheme()); 
DrawableCompat.setTintList(favoriteIcon, colorSelector); 
favoriteItem.setIcon(favoriteIcon); 
12

Özgün kaynak simgesi raster görüntüyse <bitmap> ile sarmak mümkündür.

<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/ic_action_settings" 
    android:tint="@color/colorRed"/> 

ve ardından menü öğesi için bu çekilebilir kullanın:: Bir utils sınıfında statik bir yöntem oluşturabilir geliştirmek için

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 
<item android:id="@+id/new_game" 
    android:icon="@drawable/settings_icon" 
    android:title="@string/settings" 
    app:showAsAction="always"/> 
</menu> 
+0

Mantıklı bir çözüm. –

+0

Bu statik menü öğeleri için temiz bir çözümdür. – box

0

settings_icon.xml -

çekilebilir klasöre bu dosyayı ekle ve bu yöntemi istediğiniz her zaman kullanın.

-------- SİZİN YÖNTEMİ DEFINE -----------------------------------

public static void tintMenuIcon(Context context, MenuItem item, @ColorRes int color) { 
    Drawable normalDrawable = item.getIcon(); 
    Drawable wrapDrawable = DrawableCompat.wrap(normalDrawable); 
    DrawableCompat.setTint(wrapDrawable, context.getResources().getColor(color)); 

    item.setIcon(wrapDrawable); 
} 

--------------------- NASIL KULLANIYORUZ ------------------- ------------

Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    MenuItem menuItem = menu.findItem(R.id.action_delete); 

    if (menuItem != null) { 
     tintMenuIcon(MainActivity.this, menuItem, android.R.color.holo_purple);//HERE 
    } 

    return true; 
} 

Kaynağım oldu: örnek `item` xml etiketi, örneğin bir özellik yaratmak için