导航抽屉项目图标没有显示原始颜色

我试图显示一个图标旁边的项目在我的菜单中的导航抽屉,但由于某些原因,图标总是出现在灰色而不是原来的颜色(棕色)。有没有什么办法可以防止这种情况的发生,以显示图标的原始颜色?

MainActivity.java

public class MainActivity extends AppCompatActivity {


private DrawerLayout mDrawerLayout;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);


NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
if (navigationView != null) {
setupDrawerContent(navigationView);
}
}


private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
mDrawerLayout.closeDrawers();


return true;
}
});
}
}

盛装的抽屉 _ view. xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="Section">
<menu>
<item
android:id="@+id/navigation_item_1"
android:icon="@drawable/ic_browncircle"
android:title="Sub item 1" />
</menu>
</item>
</menu>

enter image description here

93095 次浏览

您可以尝试使用有色可绘制,不确定它是否低于5.0。

创建一个可绘制的并添加以下代码。

<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_browncircle"
android:tint="@color/brownColor"/>

然后将可绘制的菜单项更改为刚刚创建的菜单项。如果这不管用,那我就不知道还有什么其他办法了。你可以试试这个库: https://github.com/mikepenz/MaterialDrawer我在我的项目中经常使用它。

我曾经在我的一个应用程序中尝试过类似的东西。是的,图标的颜色似乎没有改变。但我想到了另一个办法。这是我的 ic_browncircle.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"
android:tint="@color/brown"
>
<size
android:height="3dp"
android:width="3dp"
/>
<solid android:color="@color/brown"/>
</shape>

我相信这和你的差不多,但是没有任何效果,也不会改变颜色。

所以我做了这个。

navigationView.getMenu()
.findItem(R.id. navigation_item_1)
.getIcon()
.setColorFilter(Color.parseColor("#b69260"), PorterDuff.Mode.SRC_ATOP);

看起来起作用了,结果是这样的。

enter image description here

我在这里找到了答案: https://stackoverflow.com/a/30632980/875249

为了避免这种联系,其实很简单:

    mNavigationView.setItemIconTintList(null);

这将禁用所有基于状态的着色,但您也可以指定自己的列表。对我很有效!

下面是创建颜色状态列表的详细信息,但它也非常简单: Http://developer.android.com/reference/android/content/res/colorstatelist.html

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="@color/primary" />
<item android:state_checked="false" android:color="@android:color/white" />
</selector>

使用

    mNavigationView.setItemIconTintList(null);

它是正确的。还有,如果你所有的图标在一个配色方案(我有所有的白色) 您可以通过 xml 文件-app: itemIconTint = “@android: color/white”进行设置

我的情况是:

<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:clickable="true"
app:headerLayout="@layout/nav_header_main"
app:itemTextColor="@android:color/white"
app:menu="@menu/activity_main_drawer"
android:background="@android:color/black"
app:itemIconTint="@android:color/white"
/>

只需在 xml 中添加一行

app:itemIconTint="@color/white"

加上这个

 android:tint="@color/colorPrimary"

如果您创建一个项目与导航抽屉,Android Studio提供。在 Main Activity 类中,只需将这行代码 navigationView.setItemIconTintList(null);添加到 onCreate方法中即可。像这样

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
navigationView.setItemIconTintList(null); // <----- HERE
setupDrawerContent(navigationView);

这个代码怎么不工作 MainActivity.java

                NavigationView.setItemIconTintList(null); // not working

所以你可以利用它。

MainActivity.java

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
navigationView.setItemIconTintList(null); // <-- HERE add this code for icon color

我找到了解决办法。

1) 进入设计选项卡
2) 点击 < strong > navView
3) 在属性中搜索 Itemicontint
4) 写入 null并按 Enter

 BottomNavigationView navigationbtn = findViewById(R.id.bottomNavigationView);


BottomNavigationMenuView mbottomNavigationMenuView =
(BottomNavigationMenuView) navigationbtn.getChildAt(0);


View view3 = mbottomNavigationMenuView.getChildAt(2);


BottomNavigationItemView itemView3 = (BottomNavigationItemView) view3;


itemView3.setIconTintList(null);