导航抽屉项目图标不显示原始颜色
我正在尝试在我的导航抽屉的菜单项旁边显示一个图标,但出于某种原因,图标总是以灰色显示,而不是原始颜色(棕色)。 有什么办法来防止这种情况发生,以显示图标的原始颜色?
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>
我在这里find了答案: https : //stackoverflow.com/a/30632980/875249
为了避免这个链接,它非常简单:
mNavigationView.setItemIconTintList(null);
这将禁用所有基于状态的着色,但是您也可以指定自己的列表。 它对我很好!
这里是你可以得到创build一个颜色状态列表的细节,但它也很简单: 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);
这是正确的。 另外如果所有的图标在一个配色scheme(我全白了),你可以通过XML文件设置 – 应用程序: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" />
我在我的一个应用程序中尝试过类似的东西。 是的,看起来图标的颜色不会改变。 但是我已经设法处理另一个解决方法。 这是我的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);
它似乎工作。 结果如下。
你可以尝试使用有色的drawable,不知道它是否在5.0以下。
创build一个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"/>
然后将您的菜单项可更改为您刚刚创build的菜单项。 如果这不起作用,那么我不确定任何其他解决scheme。 你可以试试这个库: https : //github.com/mikepenz/MaterialDrawer我在我的项目中使用了很多。
只需在xml中添加一行
app:itemIconTint="@color/white"
- 渲染期间引发的exception:二进制XML文件行#-1:错误膨胀类<未知>
- 寻找post / pre / set Translate(在Matrix对象中)以及如何使用它们的解释
- 根据字符设置TextView的宽度
- res文件夹中的可绘制文件夹?
- Android:在Activity生命周期中何时调用onCreateOptionsMenu?
- 如何在SnackBar中使用setDuration()方法(Androiddevise支持库)
- 获取缩略图Uri /存储在SD卡+ Android的图像的path
- Android onCreate或onStartCommand启动服务
- 删除ListView分隔符(在xml布局文件中)