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

时间:2015-07-13 22:04:49

标签: java android xml android-support-library

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

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

drawer_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

10 个答案:

答案 0 :(得分:301)

我在这里找到答案: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>

答案 1 :(得分:41)

使用

    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"
    />

答案 2 :(得分:5)

我在我的应用程序中尝试过类似的东西。是的,似乎图标颜色没有变化。但我设法做了另一种解决方法。这是我的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

答案 3 :(得分:3)

您可以尝试使用有色的drawable,不确定它是否在5.0以下工作。

创建一个drawable并添加以下代码。

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

然后将菜单项drawable更改为刚刚创建的菜单项。如果这不起作用,那么我不确定是否有任何其他解决方案。你可以尝试这个库:https://github.com/mikepenz/MaterialDrawer我在我的项目中经常使用它。

答案 4 :(得分:1)

只需在xml中添加一行

  

app:itemIconTint="@color/white"

答案 5 :(得分:1)

如果使用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);

答案 6 :(得分:1)

我找到了解决方法。

1)转到“设计”标签
2)点击 navView
3)在属性中搜索 itemicontint
4)输入null并按 Enter

答案 7 :(得分:0)

添加此

 android:tint="@color/colorPrimary"

答案 8 :(得分:0)

此代码无法正常工作 MainActivity.java

 divisibleSumPairs (n, k, ar) => {
  let count = 0;
  ar = ar.map((value, index, arr) => {
    for (let i = index + 1; i <= arr.length; i++) {
      if ((value + arr[i]) % k === 0) {
        count++;
      }
    }
  });
  return count
}

因此您可以使用它。

MainActivity.java

                NavigationView.setItemIconTintList(null); // not working

答案 9 :(得分:0)

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

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

       View view3 = mbottomNavigationMenuView.getChildAt(2);

       BottomNavigationItemView itemView3 = (BottomNavigationItemView) view3;

        itemView3.setIconTintList(null);