Как изменить значки меню навигации и переполнения панели инструментов (appcompat v7)?

Мне сложно работать с панелью инструментов V7. То, что когда-то было простой задачей для ActionBar , теперь кажется слишком сложным. Независимо от того, какой стиль я устанавливаю, я не могу изменить значок навигации (который открывает ящик) или значок меню переполнения (который открывает меню).

Поэтому у меня есть Toolbar

  

Код я выгляжу так:

 //before in the code I do mToolbar = (Toolbar) findViewById(R.id.toolbar); private void initToolbar() { setSupportActionBar(mToolbar); getSupportActionBar().setDisplayShowTitleEnabled(false); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); } 

Теперь мне нужно изменить Drawable для этих двух значков.

Как это сделать для Toolbar compat v7? Думаю, мне нужно будет изменить стрелку, видимую, когда ящик открыт (Android 5.0).

Чтобы изменить значок навигации, вы можете использовать:

 Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.drawable.my_icon); 

Чтобы изменить значок переполнения, вы можете определить такой стиль:

   

В любом случае было бы неплохо изменить стандартный значок, например меню переполнения.

Если вы хотите изменить цвет значка, вы можете использовать:

   
  mToolbar.setNavigationIcon(R.mipmap.ic_launcher); mToolbar.setOverflowIcon(ContextCompat.getDrawable(this, R.drawable.ic_menu)); 

Для правильного меню вы можете сделать это:

 public static Drawable setTintDrawable(Drawable drawable, @ColorInt int color) { drawable.clearColorFilter(); drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN); drawable.invalidateSelf(); Drawable wrapDrawable = DrawableCompat.wrap(drawable).mutate(); DrawableCompat.setTint(wrapDrawable, color); return wrapDrawable; } 

И в вашей деятельности

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_profile, menu); Drawable send = menu.findItem(R.id.send); Drawable msg = menu.findItem(R.id.message); DrawableUtils.setTintDrawable(send.getIcon(), Color.WHITE); DrawableUtils.setTintDrawable(msg.getIcon(), Color.WHITE); return true; } 

Это результат:

введите описание изображения здесь

Существует простой, легкий и лучший подход, если нам нужно изменить только цвет значка гамбургера / назад.

Это лучше, поскольку он меняет цвет только нужного значка, тогда как colorControlNormal и android:textColorSecondary могут влиять на другие дочерние элементы панели инструментов.

   

Все вышеперечисленные решения работали для меня в API 21 или выше, но не в API 19 (KitKat). Небольшие изменения сделали трюк для меня в более ранних версиях. Обратите внимание на Widget.Holo вместо Widget.AppCompat

  

добавьте тему по умолчанию в эту строку;

  @color/my_color 

если вы хотите сменить значки на вектор , создайте новый. а затем в вашем Activity.java :

 Toolbar toolbar = findViewById(R.id.your_toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); toolbar.setNavigationIcon(R.drawable.your_icon); mToolbar.setOverflowIcon(ContextCompat.getDrawable(this, R.drawable.your_icon2)); 

Чтобы изменить цвет значка вектора , перейдите в файл Vector XML .. в этом случае это будет your_icon.xml , он будет выглядеть так:

   

Обратите внимание, что мы использовали эти атрибуты для установки цвета Vector:

 android:fillColor="@color/Your_Color" 

Изменить : вы не можете использовать цвет из ваших цветов. XML или где-то еще, цвет должен быть декалирован непосредственно в XML-файле Vector .. поэтому он будет выглядеть следующим образом:

 android:fillColor="#FFF" 

если вы хотите изменить значки пунктов меню, значок стрелки (назад / вверх) и значок с тремя точками, вы можете использовать android:tint

   

какая тема, которую вы использовали в действии, добавляет ниже один код строки

для белого

  or  

для черных

   or  

Чтобы показать значок, используйте getSupportActionBar().setIcon(R.xxx.xxx)

В моем случае код: –

getSupportActionBar().setIcon (R.mipmap.ic_launcher);

Interesting Posts
Давайте будем гением компьютера.