【问题标题】:Change color of Navigation Drawer Icon in Android Studio default template在 Android Studio 默认模板中更改导航抽屉图标的颜色
【发布时间】:2016-01-29 04:39:53
【问题描述】:

Android Studio 中新的默认导航抽屉活动模板

在菜单文件activity_main_drawer 中定义其标题和图标,如下所示:

<group android:checkableBehavior="single">
    <item
        android:id="@+id/nav_camara"
        android:icon="@drawable/ic_action_emo_cool"
        android:title="Import" />
    <item
        android:id="@+id/nav_gallery"
        android:icon="@android:drawable/ic_menu_gallery"
        android:title="Gallery" />
    <item
        android:id="@+id/nav_slideshow"
        android:icon="@android:drawable/ic_menu_slideshow"
        android:title="Slideshow" />
        ...

我的示例中的第一项使用红色图标:

但是当我运行应用程序时,图标的颜色仍然是黑色。我已经对蓝色、绿色、黄色和紫色图标进行了测试,但结果是一样的。

我在某处读到工具栏应该使用ThemeOverlay.AppCompat.Dark.ActionBar,而我的应用程序已经在styles.xml 文件中使用了它:

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

最初我认为这与 Android Studio 的缓存功能有关,因此我使缓存无效并重新启动了 Android Studio,但没有成功。

【问题讨论】:

标签: android navigation-drawer


【解决方案1】:

根据@MD 的评论,我需要做的就是添加:

app:itemIconTint="@color/my_desired_colour"

NavigationView(它位于activity_main.xml 布局文件中)默认色调是黑色,但您可以使用#000000 使用更深的黑色阴影

 <android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_main"
    app:itemIconTint="#000000"
    app:menu="@menu/activity_main_drawer" />

【讨论】:

  • 谢谢 :) 我将如何为除一个之外的所有图标设置色调。对于一个特定的图标,我希望将色调设置为 null(即)一个特定的菜单项图标在所有状态下都以全彩显示
  • 欢迎您...但我不确定如何实现这一点。对不起
  • 每件商品的不同颜色如何? Google Play 有此类项目的导航,或者他们只是将 PNG 用于彩色项目,将矢量绘图用于其他项目?
  • @user25 我不知道这是怎么做到的,抱歉。
  • 您会在 menu 文件夹中找到您的NavigationView,然后将app:itemIconTint="#000000" 放入注意:“#000000”您可以更改任何您想要的颜色
【解决方案2】:

创建新样式:

<style name="DrawerIconStyle" parent="Widget.AppCompat.DrawerArrowToggle">
    <item name="color">@android:color/red</item>
</style>

在你的主题中,添加这一行:

<item name="drawerArrowStyle">@style/DrawerIconStyle</item>

【讨论】:

  • 这对我来说非常有效。我需要更改抽屉图标(三个条形和箭头)的颜色,它让我可以先进行更改。
【解决方案3】:

如果你想动态设置它,你可以使用:

ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open_drawer, R.string.close_drawer);

actionBarDrawerToggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.colorAccent));

【讨论】:

    【解决方案4】:

    基于@ojonugwa ochalifu 和@MD 的评论,

    你可以通过写app:itemIconTint来实现,但是如果你写这个,导航抽屉图标的颜色也会改变。经过大量的研发,我发现一个简单易用的解决方案是你在AppBarLayout的主题中定义了&lt;item name="colorControlNormal"&gt;#FFE730&lt;/item&gt;,或者如果你只使用Toolbar而没有AppBarLayout,你也可以在主题或@中写&lt;item name="colorControlNormal"&gt;#FFE730&lt;/item&gt; 987654327@ of Toolbar 在您的 xml 中。

    这也会改变活动的后退箭头的颜色。

    希望这对所有面临此类问题的人有所帮助。

    【讨论】:

      【解决方案5】:

      就我而言,我有一种风格

       <style name="MyToolbarStyle" parent="Theme.AppCompat">
           <item name="actionOverflowButtonStyle">@style/ActionButtonOverflowStyle</item>
           <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
       </style>
       <style name="ActionButtonOverflowStyle">
              <item name="android:color">@color/colorPrimary</item>
          </style>
          <style name="DrawerArrowStyle">
              <item name="android:color">@color/colorPrimary</item>
          </style>
      

      并将主题应用于 Appbar 布局,因此以编程方式链接颜色不起作用。

      因此,尝试删除您应用的所有样式,以防您无法更改图标的颜色,然后尝试上述解决方案。

      【讨论】:

        【解决方案6】:

        这适用于我从您拖动到 NavigationView 小部件的 app:menu 属性中的菜单 xml 文件中更改图标颜色。

        使用app:iconTint属性设置图标颜色。

        <?xml version="1.0" encoding="utf-8"?>
        <menu xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto">
            <item
                android:id="@+id/..."
                android:icon="@drawable/ic_person_black_24dp"
                android:title="..."
                app:iconTint="#FFEB3B" />
            <item
                android:id="@+id//..."
                android:icon="@drawable/ic_settings_black_24dp"
                android:title="..."
                app:iconTint="#FFEB3B" />
        
            <item
                android:id="@+id//..."
                android:icon="@drawable/logout"
                android:title="..."
                app:iconTint="#FFEB3B"/>
        </menu>
        

        【讨论】:

          【解决方案7】:

          我在onCreate 中调用了这个方法navigationView.setItemIconTintList(null);,这样我就可以像这样覆盖导航抽屉中图标项的默认颜色

          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_places);
              drawer = findViewById(R.id.drawer_layout);
              NavigationView navigationView = findViewById(R.id.nav_view);
              navigationView.setNavigationItemSelectedListener(this);
              navigationView.setItemIconTintList(null);
          }
          

          然后我在activity_places_drawer.xml 中使用android:iconTint="@color/metallic_blue" 更改了导航抽屉中每个图标的颜色

          <?xml version="1.0" encoding="utf-8"?>
          <menu xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          tools:showIn="navigation_view">
          
          <group android:checkableBehavior="single">
              <item
                  android:id="@+id/invite"
                  android:icon="@drawable/ic_people_orange_24dp"
                  android:title="@string/menu_invite"
                  android:fontFamily="@font/roboto_medium" />
          </group>
          

          希望这个答案有帮助。

          【讨论】:

          • 优秀的答案!
          【解决方案8】:

          我通过执行这行代码更改了我的抽屉菜单图标颜色:

          actionBarDrawerToggle.getDrawerArrowDrawable()
                               .setColor(getResources().getColor(R.color.colorAccent));
          

          【讨论】:

            【解决方案9】:

            您必须将颜色文件中的 colorAccent 更改为您想要的颜色:

              <color name="colorAccent">whichever color required</color>
            

            这个解决方案对我有用

            【讨论】:

              【解决方案10】:

              在导航视图中添加 itmIconTint

                  <com.google.android.material.navigation.NavigationView
                  android:id="@+id/nav_view"
                  android:layout_width="wrap_content"
                  android:layout_height="match_parent"
                  android:background="@drawable/drawerbackgtound"
                  android:layout_gravity="start"
                  android:fitsSystemWindows="true"
                  app:itemTextColor="@color/white"
                  app:iconTint="#FFFFFF"
                  app:itemIconTint="#FFFFFF"
                  app:headerLayout="@layout/nav_header_main"
                  app:menu="@menu/activity_main_drawer" />
              

              【讨论】:

                猜你喜欢
                • 2016-11-01
                • 2016-12-22
                • 2015-10-23
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多