2015-10-29 126 views
1

如何使導航達特爾的圖標顯示其真實顏色?材質設計導航抽屜圖標爲灰色

我設計了我自己的自定義圖標,但它們在我的導航器中以灰色顯示。

我目前使用的整個應用程序的主題是:Light.DarkActionBar

這是drawermenu:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 


    <item android:title="" 
     android:id="@+id/nav_item_inbox" 
     /> 

<item android:title="Home" 
      android:id="@+id/nav_item_home" 
      android:icon="@drawable/home" 

     /> 

    <item android:title="News"> 
     <menu> 
    <item android:title="Events News" 
      android:id="@+id/nav_item_events" 
      android:icon="@drawable/ic_action_search" 
     /> 

    <item android:title="International News" 
      android:id="@+id/nav_item_international" 
      android:icon="@drawable/nav_icong"/> 

      <item 
       android:title="Climatic News" 
       android:id="@+id/nav_item_weathernews" 
       android:icon="@drawable/spam"/> 
     </menu> 
    </item> 


    <item android:title="Climate"> 
     <menu> 

      <item 
       android:title="Weather Widget" 
       android:id="@+id/wewidget" 
       android:icon="@drawable/bin"/> 
     </menu> 
    </item> 

    <group android:id="@+id/About"> 
     <item android:title="About" 
      android:id="@+id/abt" 
       android:icon="@drawable/settings"/> 

     <item android:title="FeedBack" 
      android:icon="@drawable/help"/> 

     <item android:title="Help" 
      android:icon="@drawable/help"/> 
    </group> 


</menu> 

這是activity_main佈局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    android:orientation="vertical"> 
    <android.support.v7.widget.Toolbar 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/toolbar" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:fitsSystemWindows="true" 
     android:minHeight="?attr/actionBarSize" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
     android:background="?attr/colorPrimary" 
     android:animateLayoutChanges="true"> 
    </android.support.v7.widget.Toolbar> 
    <android.support.v4.widget.DrawerLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:layout_height="match_parent" 
     android:layout_width="match_parent" 
     android:id="@+id/drawerLayout" 
     > 
     <FrameLayout 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/containerView"> 
     </FrameLayout> 
     <android.support.design.widget.NavigationView 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:app="http://schemas.android.com/apk/res-auto" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      android:id="@+id/shitstuff" 
      app:itemTextColor="@color/black" 
      app:menu="@menu/drawermenu" 
      android:background="@android:color/white" 
      android:layout_marginTop="-24dp" 
      /> 
    </android.support.v4.widget.DrawerLayout> 
</LinearLayout> 

這裏是MainActivity類:

public class MainActivity extends AppCompatActivity { 
    DrawerLayout mDrawerLayout; 
    NavigationView mNavigationView; 
    FragmentManager mFragmentManager; 
    FragmentTransaction mFragmentTransaction; 
    View view; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
      mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); 
      mNavigationView = (NavigationView) findViewById(R.id.shitstuff) ; 
      mFragmentManager = getSupportFragmentManager(); 
      mFragmentTransaction = mFragmentManager.beginTransaction(); 
      mFragmentTransaction.replace(R.id.containerView,new HomeFragment()).commit(); 
      mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(MenuItem menuItem) { 
       mDrawerLayout.closeDrawers(); 
       if (menuItem.getItemId() == R.id.nav_item_home) { 
        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 
        fragmentTransaction.replace(R.id.containerView,new HomeFragment()).commit(); 

       } 
       if (menuItem.getItemId() == R.id.nav_item_events) { 
        FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction(); 
        xfragmentTransaction.replace(R.id.containerView,new EventsFragment()).commit(); 
       } 

       if (menuItem.getItemId() == R.id.nav_item_international) { 
        FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction(); 
        xfragmentTransaction.replace(R.id.containerView,new InternationalNews()).commit(); 
       } 
       if (menuItem.getItemId() == R.id.nav_item_weathernews) { 
        FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction(); 
        xfragmentTransaction.replace(R.id.containerView, new WeatherNews()).commit(); 
       } 
       if (menuItem.getItemId() == R.id.wewidget) { 
        FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction(); 
        xfragmentTransaction.replace(R.id.containerView,new Weathermain()).commit(); 
       } 

       if (menuItem.getItemId() == R.id.abt) { 
        FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction(); 
        xfragmentTransaction.replace(R.id.containerView,new About()).commit(); 
       } 
       return false; 
      } 

     }); 
       android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar); 
       //toolbar.setAlpha(0); 
       //toolbar.setTranslationY(-300); 
       //toolbar.animate().setDuration(1000).translationY(0).alpha(1); 

       ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout, toolbar, R.string.app_name, 
       R.string.app_name); 

       mDrawerLayout.setDrawerListener(mDrawerToggle); 

       mDrawerToggle.syncState(); 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     // Handle action bar actions click 
     switch (item.getItemId()) { 

      // case R.id.menuitem_recipies: 
      // startActivity(new Intent(this, Recipies.class)); 
      // Toast.makeText(this, getString(R.string.recs), 
      //  Toast.LENGTH_SHORT).show(); 
      //return true; 

      case R.id.menuitem_share: 
       startActivity(new Intent(this, Share.class)); 

       Toast.makeText(this, getString(R.string.ui_menu_share), 
         Toast.LENGTH_SHORT).show(); 
       return true; 
      case R.id.menuitem_feedback: 
       startActivity(new Intent(this, Feedback.class)); 
       Toast.makeText(this, getString(R.string.ui_menu_feedback), 
         Toast.LENGTH_SHORT).show(); 
       return true; 
      case R.id.menuitem_about: 
       startActivity(new Intent(this, About.class)); 
       Toast.makeText(this, getString(R.string.ui_menu_about), 
         Toast.LENGTH_SHORT).show(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

ScreenShot

+0

你談論導航抽屜內的漢堡包圖標或圖標?你可以發佈圖片嗎? – WonderKid

+0

檢查此https://medium.com/android-news/navigation-drawer-styling-according-material-design-5306190da08f#.le151mffb – Sunny

+0

沒有在導航列表中的項目,可選擇的行...旁邊的圖標可選行中的項目呈灰色@wonderkid –

回答

0

看看這個Answer,這對我來說很完美。 navigationView.setItemIconTintList(null); 的原因,在Android的代碼,他們將一個默認ColorStateList

// NavigationView 
final ColorStateList itemIconTint; 
if (a.hasValue(R.styleable.NavigationView_itemIconTint)) { 
     itemIconTint = a.getColorStateList(R.styleable.NavigationView_itemIconTint); 
    } else { 
     itemIconTint = createDefaultColorStateList(android.R.attr.textColorSecondary); 
}