在 Android Studio 默认模板中更改导航抽屉图标的颜色
Change color of Navigation Drawer Icon in Android Studio default template
Android Studio
中的新默认导航抽屉 Activity 模板
在菜单文件 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" />
...
我示例中的第一项使用红色图标:
但是当我 运行 应用程序时,图标的颜色仍然存在 black.I 已经针对蓝色、绿色、黄色和紫色图标进行了测试,但结果是一样的。
我在某处读到工具栏应该使用 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 但没有成功。
根据@MD 的评论,我需要做的就是添加:
app:itemIconTint="@color/my_desired_colour"
到NavigationView
(它位于activity_main.xml
布局文件中)默认色调是黑色,但您可以使用#000000
[=15=使用更深的黑色阴影]
<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" />
您必须将颜色文件中的 colorAccent 更改为您想要的颜色:
<color name="colorAccent">whichever color required</color>
这个解决方案对我有用
创建新样式:
<style name="DrawerIconStyle" parent="Widget.AppCompat.DrawerArrowToggle">
<item name="color">@android:color/red</item>
</style>
并在您的主题中添加这一行:
<item name="drawerArrowStyle">@style/DrawerIconStyle</item>
根据@ojonugwa ochalifu 和@MD 的评论,
你可以通过写app:itemIconTint
来实现,但是如果你这样写,导航抽屉图标的颜色也会改变。经过大量研发,我找到的简单易行的解决方案是,您在 AppBarLayout
的主题中定义了 <item name="colorControlNormal">#FFE730</item>
,或者如果您只使用 Toolbar
而没有 AppBarLayout
,您也可以在你的 xml.
中写 <item name="colorControlNormal">#FFE730</item>
或 Toolbar
的 popupTheme
这也会改变 activity 的后退箭头的颜色。
希望这对遇到此类问题的所有人有所帮助。
就我而言,我的风格是
<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 布局,因此以编程方式链接颜色不起作用。
因此,尝试删除您应用的任何样式,以防您无法更改图标的颜色,然后尝试上述给出的解决方案。
如果您想动态设置它,您可以使用:
ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open_drawer, R.string.close_drawer);
actionBarDrawerToggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.colorAccent));
这对我来说适用于从菜单 xml 文件中更改图标颜色,您将其拖动到 NavigationView
小部件的 app:menu
属性中。
使用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>
我在 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>
希望这个回答对您有所帮助。
在导航视图中添加 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" />
我通过执行这行代码更改了我的抽屉菜单图标颜色:
actionBarDrawerToggle.getDrawerArrowDrawable()
.setColor(getResources().getColor(R.color.colorAccent));
只需使用此代码:
navigationView.setItemIconTintList(null);
Android Studio
中的新默认导航抽屉 Activity 模板在菜单文件 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" />
...
我示例中的第一项使用红色图标:
但是当我 运行 应用程序时,图标的颜色仍然存在 black.I 已经针对蓝色、绿色、黄色和紫色图标进行了测试,但结果是一样的。
我在某处读到工具栏应该使用 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 但没有成功。
根据@MD 的评论,我需要做的就是添加:
app:itemIconTint="@color/my_desired_colour"
到NavigationView
(它位于activity_main.xml
布局文件中)默认色调是黑色,但您可以使用#000000
[=15=使用更深的黑色阴影]
<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" />
您必须将颜色文件中的 colorAccent 更改为您想要的颜色:
<color name="colorAccent">whichever color required</color>
这个解决方案对我有用
创建新样式:
<style name="DrawerIconStyle" parent="Widget.AppCompat.DrawerArrowToggle">
<item name="color">@android:color/red</item>
</style>
并在您的主题中添加这一行:
<item name="drawerArrowStyle">@style/DrawerIconStyle</item>
根据@ojonugwa ochalifu 和@MD 的评论,
你可以通过写app:itemIconTint
来实现,但是如果你这样写,导航抽屉图标的颜色也会改变。经过大量研发,我找到的简单易行的解决方案是,您在 AppBarLayout
的主题中定义了 <item name="colorControlNormal">#FFE730</item>
,或者如果您只使用 Toolbar
而没有 AppBarLayout
,您也可以在你的 xml.
<item name="colorControlNormal">#FFE730</item>
或 Toolbar
的 popupTheme
这也会改变 activity 的后退箭头的颜色。
希望这对遇到此类问题的所有人有所帮助。
就我而言,我的风格是
<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 布局,因此以编程方式链接颜色不起作用。
因此,尝试删除您应用的任何样式,以防您无法更改图标的颜色,然后尝试上述给出的解决方案。
如果您想动态设置它,您可以使用:
ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open_drawer, R.string.close_drawer);
actionBarDrawerToggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.colorAccent));
这对我来说适用于从菜单 xml 文件中更改图标颜色,您将其拖动到 NavigationView
小部件的 app:menu
属性中。
使用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>
我在 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>
希望这个回答对您有所帮助。
在导航视图中添加 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" />
我通过执行这行代码更改了我的抽屉菜单图标颜色:
actionBarDrawerToggle.getDrawerArrowDrawable()
.setColor(getResources().getColor(R.color.colorAccent));
只需使用此代码:
navigationView.setItemIconTintList(null);