gpt4 book ai didi

android - 如何给抽屉导航的菜单项上色?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:15:29 28 4
gpt4 key购买 nike

我正在创建抽屉导航,我看到 playtore 有彩色菜单图标我想知道我该怎么做。我尝试通过 colorFilter 在菜单图标上应用颜色,但应用程序强制关闭

My app

what i wanted

这是我的代码

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="@+id/grp1"
android:checkableBehavior="single">
<item
android:id="@+id/navigation_songs"
android:checked="true"
android:icon="@drawable/ic_audiotrack_white_24dp"
android:title="@string/songs" />
<item
android:id="@+id/navigation_albums"
android:icon="@drawable/ic_album_white_24dp"
android:title="@string/albums" />
<item
android:id="@+id/navigation_artist"
android:icon="@drawable/ic_person_white_24dp"
android:title="@string/artists" />
<item
android:id="@+id/navigation_playlist"
android:icon="@drawable/ic_playlist_play_white_24dp"
android:title="@string/playlist" />
</group>
<group
android:id="@+id/grp2"
android:checkableBehavior="none">
<item
android:id="@+id/navigation_about"
android:icon="@drawable/ic_info_white_24dp"
android:title="@string/about" />
<item
android:id="@+id/navigation_settings"
android:icon="@drawable/ic_settings_white_24dp"
android:title="@string/settings" />
</group>
</menu>

最佳答案

  1. 要将所有图标刷成特定的颜色,您需要将app:itemIconTint 添加到您的NavigationView:

    <android.support.design.widget.NavigationView
    ........
    app:itemIconTint="<your color>"/>

    enter image description here

  2. 仅使用两种颜色刷亮您的图标:

    创建一个选择器:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#0000FF" android:state_checked= "true" />
    <item android:color="#FF0000" />
    </selector>

    并将其作为 app:itemIconTint 应用到您的 NavigationView 中:

    <android.support.design.widget.NavigationView
    ........
    app:itemIconTint="@drawable/tint_color_selector"/>

    最后一步 - 将 android:checked="true" 添加到要刷不同的抽屉菜单 xml 中的 MenuItems:

     <item
    android:id="@+id/nav_slideshow"
    android:checked="true"
    android:icon="@drawable/ic_menu_slideshow"
    android:title="Slideshow" />

    enter image description here

  3. 将所有图标刷成不同颜色,就像 Google 在 Google Play 中所做的那样:

    禁用图标着色:

      navigationView.setItemIconTintList(null);

    将您想要的图标添加到 res/drawable 并在菜单的 xml 中将它们指定为 android:icon。 (我可以为 android 图标推荐一个不错的服务 icons8.com/web-app/new-icons/android )

    enter image description here

    您可以绘制现有图标,而不是上传新的彩色图标,但这非常 hacky:

        Drawable oldIcon = navigationView
    .getMenu()
    .findItem(R.id.nav_gallery)
    .getIcon();

    if (!(oldIcon instanceof BitmapDrawable)) {
    return;
    }

    Bitmap immutable = ((BitmapDrawable)oldIcon).getBitmap();
    Bitmap mutable = immutable.copy(Bitmap.Config.ARGB_8888, true);
    Canvas c = new Canvas(mutable);
    Paint p = new Paint();
    p.setColor(Color.RED);
    p.setColorFilter(new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY));
    c.drawBitmap(mutable, 0.f, 0.f, p);
    BitmapDrawable newIcon = new BitmapDrawable(getResources(), mutable);

    navigationView
    .getMenu()
    .findItem(R.id.nav_gallery)
    .setIcon(newIcon);

    注意! 在模板项目的 res/drawables-v21 中,Google 使用 VectorDrawable 而不是旧的 BitmapDrawables,所以这段代码在那里不起作用。

希望对您有所帮助。

关于android - 如何给抽屉导航的菜单项上色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34705823/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com