在Android Studio默认模板中更改导航抽屉图标的颜色

时间:2015-10-29 06:37:58

标签: android navigation-drawer

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

enter image description here

在菜单文件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" />
        ...

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

enter image description here

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

enter image description here

我在某处读到工具栏应该使用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而没有运气。

8 个答案:

答案 0 :(得分:101)

基于@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" />

答案 1 :(得分:2)

根据@ojonugwa ochalifu和@MD的评论,

您可以通过编写app:itemIconTint来实现,但如果您这样写,导航抽屉图标颜色也将更改。我在很多R&amp; D之后找到的简单易用的解决方案就是你在<item name="colorControlNormal">#FFE730</item>的主题中定义了AppBarLayout,或者只在没有Toolbar的情况下使用AppBarLayout,也可以在主题中写<item name="colorControlNormal">#FFE730</item>或在xml中popupTheme Toolbar

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

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

答案 2 :(得分:1)

就我而言,我有一种风格

 <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布局,因此以编程方式链接颜色无效。

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

答案 3 :(得分:1)

如果要动态设置,可以使用:

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

答案 4 :(得分:1)

这对我有用,它用于更改菜单XML文件中的图标颜色,您可以将其拖动到app:menu小部件的NavigationView属性中。

使用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>

答案 5 :(得分:0)

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

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

此解决方案适合我

答案 6 :(得分:0)

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

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

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

<?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>

希望这个答案会有所帮助。

答案 7 :(得分:-1)

在导航视图中添加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" />