2016-01-03 3 views
4

У меня странная проблема с навигационным ящиком. Я создал навигационный ящик, используя шаблон по умолчанию, поставляемый с Android Studio, и создал его с помощью файла menu.xml. Теперь проблема заключается в том, что всякий раз, когда я добавляю элемент списка изображений в навигационную панель, цвет меняется на серый, несмотря на любое цветное изображение. вот одно изображение навигации ящикИзменение цвета в навигационном ящике

icon

Как вы можете видеть цвет изображения зеленого цвета, но при добавлении к навигации ящик выглядит как Navigation Drawer

Я не знаю, что причиной этого

Вот menu.xml

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

    <group android:checkableBehavior="single"> 
     <item 
      android:id="@+id/nav_camera" 
      android:icon="@drawable/clock" 
      android:title="Home" /> 
     <item 
      android:id="@+id/nav_gallery" 
      android:icon="@drawable/mega_event" 
      android:title="Mega Events" /> 
     <item 
      android:id="@+id/nav_slideshow" 
      android:icon="@drawable/tickets" 
      android:title="My Tickets" /> 
     <item 
      android:id="@+id/nav_manage" 
      android:icon="@drawable/profile" 
      android:title="Profile" /> 
     <item 
      android:id="@+id/nav_settings" 
      android:icon="@drawable/settings" 
      android:title="Settings" /> 
     <item 
      android:id="@+id/nav_logout" 
      android:icon="@drawable/logout" 
      android:title="Logout" /> 
    </group> 

</menu> 

Здесь рисуем в первом пункте это один я отправил

И активность тема

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
</style> 

и полочка деятельность навигации класса

public class ActivityNavigationDrawer extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 
    FragmentManager mFragmentManager; 
    FragmentTransaction mFragmentTransaction; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_navigation_drawer); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setBackgroundColor(Color.parseColor("#FFFFFF")); 
     navigationView.setNavigationItemSelectedListener(this); 
     mFragmentManager = getSupportFragmentManager(); 
     mFragmentTransaction = mFragmentManager.beginTransaction(); 
     mFragmentTransaction.replace(R.id.containerView,new FragmentTabs()).commit(); 
    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     return true; 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     if (id == R.id.nav_camera) { 
      // Handle the camera action 
     } else if (id == R.id.nav_gallery) { 

     } else if (id == R.id.nav_slideshow) { 

     } else if (id == R.id.nav_manage) { 

     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 
} 
+1

yourNavigationView.setItemIconTintList (нуль); попробуйте добавить его в свой oncreate .. верните назад – Abhishek

ответ

7

Вы можете использовать непосредственно app:itemIconTint для изменения цвета значка и app:itemTextColor для текста элемента изменения цвета в окне навигации.

<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_width="match_parent" 
    android:layout_height="match_parent"> 

    <!-- Content Layout --> 
    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@id/adView" 
     android:layout_below="@id/my_awesome_toolbar" /> 

    <!-- Navigation Drawer --> 
    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:itemIconTint="#FF0000" 
     app:itemTextColor="#D2691E" 
     app:menu="@menu/navigation_menu" /> 
</android.support.v4.widget.DrawerLayout> 
2

Вы можете использовать setItemTextColor и setItemIconTintList для набора текст цветового оттенка и цвета значка оттенка к пункту NavigationDrawer, это методы установка цвета в любое состояние элемента NavigationDrawer. Чтобы использовать эти методы сначала добавьте этот код в конце onCreateView:

int[][] states = new int[][]{ 
      new int[]{-android.R.attr.state_checked},// unchecked state 
      new int[]{android.R.attr.state_checked}, // checked state 
    }; 

    int[] colors = new int[]{ 
      ContextCompat.getColor(this, R.color.colorPrimary), 
      ContextCompat.getColor(this, R.color.colorPrimaryDark) 
    }; 

    ColorStateList colorStateList = new ColorStateList(states, colors); 
    navigationView.setItemTextColor(colorStateList); 
    navigationView.setItemIconTintList(colorStateList); 

этот набор кодов цвета непроверенной состояние и проверяется состояние. Вы можете установить цвет в другие состояния.

Цветная матрица и массив состояний должны иметь равные члены. Вы можете выбрать цвет, какой хотите. Вы можете использовать класс Color или использовать ресурс для использования образца. В этой ссылке вы найдете список доступных состояний developer.android.

+0

, какими будут значения для состояний и цветов? и цвет текста является правдоподобным. У меня только проблема с изображениями. –

+0

Я редактирую свой ответ. Используемое состояние в моем примере разрешает вашу проблему, вы можете удалить setItemTextColor, но я предлагаю вам использовать его, потому что, если он не используется, возможно, он может отличаться от текста и значков. – Fred

+0

, но я не делаю никаких селекторов для навигационного ящика. Это просто, и изображения меняются, когда я добавляю их в ящик для навигации. –

0

Может быть проще использовать селекторы. Код в следующем SO вопроса с незначительной модификацией все, что нужно, чтобы получить изменения цвета сделано: Navigation View's selectors behave incorrectly

просто заменить android:state_selected с android:state_checked

+0

Я не создаю селектор –

2

Вам нужно создать следующие файлы селекторных XML как navigation_item_icon.xml в свой res/color/ каталог для навигации по меню Icon отлива

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- NORMAL --> 
    <item android:color="@color/navigation_item_iconColor" android:state_checked="false" /> 
    <!-- CHECKED --> 
    <item android:color="@color/navigation_item_iconColor_selected" android:state_checked="true" /> 
</selector> 

Создать navigation_item_text.xml в свой res/color/ директора y для пункта меню текстового оттенка.

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- NORMAL --> 
    <item android:color="@color/navigation_item_textColor" android:state_checked="false" /> 
    <!-- CHECKED --> 
    <item android:color="@color/navigation_item_textColor_selected" android:state_checked="true" /> 
</selector> 

Тогда вы должны использовать navigation_item_icon.xml и navigation_item_text.xml в вашем навигационном как отливом.

<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_width="match_parent" 
    android:layout_height="match_parent"> 

    <!-- Content Layout --> 
    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@id/adView" 
     android:layout_below="@id/my_awesome_toolbar" /> 

    <!-- Navigation Drawer --> 
    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:itemBackground="@android:color/transparent" 
     app:itemIconTint="@color/navigation_item_icon" 
     app:itemTextColor="@color/navigation_item_text" 
     app:menu="@menu/navigation_menu" /> 
</android.support.v4.widget.DrawerLayout> 
+1

Использование этой строки из кода помогло мне «app: itemIconTint =» # ffffff »' –

+0

да, это тоже выполнимо .. –

+0

, пожалуйста, отметьте любой ответ как правильный ответ .. –

0

вы пытаетесь activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 

    <include layout="@layout/app_bar_main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 



    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     app:itemTextColor="@color/white" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:itemTextAppearance="@style/TextAppearance.AppCompat.Medium" 
     android:fitsSystemWindows="true" 
     app:itemIconTint="@drawable/nav_menu_item_color" 
     android:background="#414144" 
     app:headerLayout="@layout/nav_header_main" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:menu="@menu/activity_main_drawer" /> 




</android.support.v4.widget.DrawerLayout> 

и вы setDrawer в activity_main_drawer

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

    <group android:checkableBehavior="single"> 
     <item android:title=""> 

     <item android:id="@+id/nav_camara" 
      android:icon="@drawable/sidemenu_home_active_icn" 
      android:title="HOME" 

      app:actionLayout="@layout/layout_my_switch" 
      /> 
     </item> 

     <item android:id="@+id/nav_gallery" android:icon="@drawable/sidemenu_news_inactive_icn" 
      android:title="NEWS" 

      app:actionLayout="@layout/layout_my_switch2" 
      /> 

     <item android:id="@+id/nav_slideshow" android:icon="@drawable/sidemenu_ssotv_inactive_icn" 
      android:title="SSO TV" /> 
     <item android:id="@+id/nav_manage" android:icon="@drawable/sidemenu_about_inactive_icn" 
      android:title="COMICS" /> 
     <item android:id="@+id/nav_manage_1" android:icon="@drawable/sidemenu_member_inactive_icn" 
      android:title="MEMBER" /> 
     <item android:id="@+id/nav_card" android:icon="@drawable/sidemenu_card_inactive_icn" 
     android:title="CARD" /> 
     <item android:id="@+id/nav_map" android:icon="@drawable/sidemenu_map_inactive_icn" 
      android:title="MAP" /> 
     <item android:id="@+id/nav_setting" android:icon="@drawable/sidemenu_about_inactive_icn" 
      android:title="SETTING" /> 
    </group> 

    <item android:title="Communicate"> 
     <menu> 
      <item android:id="@+id/nav_share" android:icon="@android:drawable/ic_menu_share" 
       android:title="Share" /> 
      <item android:id="@+id/nav_send" android:icon="@drawable/sidemenu_close_btn" 
       android:title="SIGN OUT" /> 
     </menu> 
    </item> 

</menu> 
+0

Я не могу попробовать это сейчас, так как у меня нет этого кода со мной. –

0

Используйте это -

 navigationView.setItemIconTintList(null); 
Смежные вопросы