Подтвердить что ты не робот

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

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

Итак, у меня есть Toolbar

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/ghex"
    android:minHeight="?attr/actionBarSize"
    app:theme="@style/ThemeOverlay.AppCompat.Light"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    >

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

//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 для этих двух значков.

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

4b9b3361

Ответ 1

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

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

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

<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
    <item name="actionOverflowButtonStyle">@style/OverFlow</item>
</style>

<style name="OverFlow" parent="Widget.AppCompat.ActionButton.Overflow">
    <item name="android:src">@drawable/my_overflow_menu</item>
</style>

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

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

<android.support.v7.widget.Toolbar
  app:theme="@style/ThemeToolbar" />


<style name="ThemeToolbar" parent="Theme.AppCompat.Light">

   <!-- navigation icon color -->
   <item name="colorControlNormal">@color/my_color</item>

    <!-- color of the menu overflow icon -->
    <item name="android:textColorSecondary">@color/my_color</item>
</style>

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

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

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

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>

<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
    <item name="spinBars">true</item>
    <item name="color">@android:color/white</item>
</style>

Ответ 5

если вы хотите изменить свои значки на Vector, создайте новый. а затем в вашем 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));

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

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
<path
    android:fillColor="@color/Your_Color"
    android:pathData="M15.41,7.41L14,6l-6,6 6,6 1.41,-1.41L10.83,12z"/>

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

android:fillColor="@color/Your_Color"

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

android:fillColor="#FFF"

Ответ 6

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

<style name="OverFlowStyle"    parent="@android:style/Widget.Holo.ActionButton.Overflow">
    <item name="android:src">@drawable/ic_overflow</item>
</style>

Ответ 7

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

   <item name="colorControlNormal">@color/my_color</item>

Ответ 8

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

  <style name="ToolbarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:tint">@color/your_color</item>
  </style>

Ответ 9

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

для белых

<style name="AppTheme.NoActionBar">
      <item name="android:tint">#ffffff</item>
  </style>

or 
 <style name="AppThemeName" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:tint">#ffffff</item>
</style>

для черного

   <style name="AppTheme.NoActionBar">
      <item name="android:tint">#000000</item>
  </style>

or 
 <style name="AppThemeName" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:tint">#000000</item>
</style>

Ответ 10

Вы можете использовать этот код

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.toolbar_Like:
            item.setIcon(R.drawable.is_like);
            break;
    }
    return true;
}

Ответ 11

Чтобы изменить цвет пунктов меню параметров, вы можете

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.your_menu, menu)

    menu?.forEach {
        it.icon.setTint(Color.your_color)
    }

    return true
}

Ответ 12

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

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

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