Change the background color of the selected item in the navigation box

I want to change the blue color of the selected item in the navigation box. I can change it when you click on an element, but not on the active element. This is what I use: in the dropdown folder

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_activated="true" android:drawable="@color/default_color" /> <item android:state_selected="true" android:drawable="@color/uva_color" /> <item android:state_pressed="true" android:drawable="@color/uva_color" /> <item android:state_focused="true" android:drawable="@color/default_color" /> <item android:drawable="@color/default_color" /> </selector> 

.Xml color

 <?xml version="1.0" encoding="utf-8"?> <resources> <color name="uva_color">#f2f8ee</color> <color name="default_color">#f2f8ee</color> </resources> 

And then in the layout of the navigation box:

 <ListView android:id="@+id/left_drawer" android:layout_width="260dp" android:layout_height="match_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:fitsSystemWindows="true" android:clipToPadding="false" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:listSelector="@drawable/activated_background" android:background="#ffff"/> 

So, the current item selected does not change color .. any ideas?

EDIT using java nav drawer:

 public class MainActivity extends Activity { private DrawerLayout mDrawerLayout; private ListView mDrawerList; private ActionBarDrawerToggle mDrawerToggle; private CharSequence mDrawerTitle; private CharSequence mTitle; CustomDrawerAdapter adapter; List<DrawerItem> dataList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /** Customizzo la actionbar */ ActionBar actionBar = getActionBar(); actionBar.setCustomView(R.layout.actionbarcustom); //actionBar.setDisplayShowTitleEnabled(false); //actionBar.setDisplayShowCustomEnabled(true); setTitle("FTV"); int actionBarTitleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android"); if (actionBarTitleId > 0) { TextView title = (TextView) findViewById(actionBarTitleId); if (title != null) { title.setTextColor(Color.WHITE); } } /** * Controllo la versione di android, se Kitkat o superiore rendo la nav bar trasparente * */ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window w = getWindow(); // in Activity onCreate() for instance w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); SystemBarTintManager systemBarTintManager = new SystemBarTintManager(this); systemBarTintManager.setStatusBarTintEnabled(true); systemBarTintManager.setStatusBarTintColor(Color.parseColor("#ff3600")); /*systemBarTintManager.setNavigationBarTintEnabled(true); systemBarTintManager.setNavigationBarTintColor(Color.parseColor("#CC0000"));*/ } // Initializing dataList = new ArrayList<DrawerItem>(); mTitle = mDrawerTitle = getTitle(); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ListView) findViewById(R.id.left_drawer); mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); // Add Drawer Item to dataList dataList.add(new DrawerItem(true)); // adding a spinner to the list dataList.add(new DrawerItem("Preferiti")); // adding a header to the list dataList.add(new DrawerItem("Avvisi", R.drawable.avvisi)); dataList.add(new DrawerItem("Pianifica viaggio", R.drawable.bus)); dataList.add(new DrawerItem("Mappe e Tratte", R.drawable.maps)); //dataList.add(new DrawerItem("Lables", R.drawable.ic_action_labels)); dataList.add(new DrawerItem("Impostazioni"));// adding a header to the list dataList.add(new DrawerItem("Settings", R.drawable.settings)); /*dataList.add(new DrawerItem("Cloud", R.drawable.ic_action_cloud)); dataList.add(new DrawerItem("Camara", R.drawable.ic_action_camera)); dataList.add(new DrawerItem("Video", R.drawable.ic_action_video)); dataList.add(new DrawerItem("Groups", R.drawable.ic_action_group)); dataList.add(new DrawerItem("Import & Export", R.drawable.ic_action_import_export));*/ dataList.add(new DrawerItem("Altro")); // adding a header to the list dataList.add(new DrawerItem("About", R.drawable.about)); //dataList.add(new DrawerItem("Settings", R.drawable.ic_action_settings)); dataList.add(new DrawerItem("Help", R.drawable.help)); adapter = new CustomDrawerAdapter(this, R.layout.custom_drawer_item, dataList); mDrawerList.setAdapter(adapter); mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) { public void onDrawerClosed(View view) { getActionBar().setTitle(mTitle); invalidateOptionsMenu(); // creates call to // onPrepareOptionsMenu() } public void onDrawerOpened(View drawerView) { getActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); // creates call to // onPrepareOptionsMenu() } }; mDrawerLayout.setDrawerListener(mDrawerToggle); if (savedInstanceState == null) { if (dataList.get(0).isSpinner() & dataList.get(1).getTitle() != null) { SelectItem(2); } else if (dataList.get(0).getTitle() != null) { SelectItem(1); } else { SelectItem(0); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void SelectItem(int possition) { Fragment fragment = null; Bundle args = new Bundle(); switch (possition) { case 2: fragment = new FragmentThree(); args.putString(FragmentThree.ITEM_NAME, dataList.get(possition) .getItemName()); args.putInt(FragmentThree.IMAGE_RESOURCE_ID, dataList .get(possition).getImgResID()); break; case 3: fragment = new FragmentOne(); args.putString(FragmentOne.ITEM_NAME, dataList.get(possition) .getItemName()); args.putInt(FragmentOne.IMAGE_RESOURCE_ID, dataList.get(possition) .getImgResID()); break; case 4: fragment = new FragmentTwo(); args.putString(FragmentTwo.ITEM_NAME, dataList.get(possition) .getItemName()); args.putInt(FragmentTwo.IMAGE_RESOURCE_ID, dataList.get(possition) .getImgResID()); break; case 5: fragment = new FragmentThree(); args.putString(FragmentThree.ITEM_NAME, dataList.get(possition) .getItemName()); args.putInt(FragmentThree.IMAGE_RESOURCE_ID, dataList .get(possition).getImgResID()); break; case 6: fragment = new FragmentTwo(); args.putString(FragmentTwo.ITEM_NAME, dataList.get(possition) .getItemName()); args.putInt(FragmentTwo.IMAGE_RESOURCE_ID, dataList.get(possition) .getImgResID()); break; case 7: fragment = new FragmentThree(); args.putString(FragmentThree.ITEM_NAME, dataList.get(possition) .getItemName()); args.putInt(FragmentThree.IMAGE_RESOURCE_ID, dataList .get(possition).getImgResID()); break; case 8: fragment = new FragmentOne(); args.putString(FragmentOne.ITEM_NAME, dataList.get(possition) .getItemName()); args.putInt(FragmentOne.IMAGE_RESOURCE_ID, dataList.get(possition) .getImgResID()); break; case 9: fragment = new FragmentTwo(); args.putString(FragmentTwo.ITEM_NAME, dataList.get(possition) .getItemName()); args.putInt(FragmentTwo.IMAGE_RESOURCE_ID, dataList.get(possition) .getImgResID()); break; case 10: fragment = new FragmentThree(); args.putString(FragmentThree.ITEM_NAME, dataList.get(possition) .getItemName()); args.putInt(FragmentThree.IMAGE_RESOURCE_ID, dataList .get(possition).getImgResID()); break; case 11: fragment = new FragmentOne(); args.putString(FragmentOne.ITEM_NAME, dataList.get(possition) .getItemName()); args.putInt(FragmentOne.IMAGE_RESOURCE_ID, dataList.get(possition) .getImgResID()); break; case 12: fragment = new FragmentThree(); args.putString(FragmentThree.ITEM_NAME, dataList.get(possition) .getItemName()); args.putInt(FragmentThree.IMAGE_RESOURCE_ID, dataList.get(possition) .getImgResID()); break; case 13: fragment = new FragmentOne(); args.putString(FragmentOne.ITEM_NAME, dataList.get(possition) .getItemName()); args.putInt(FragmentOne.IMAGE_RESOURCE_ID, dataList.get(possition) .getImgResID()); break; case 14: fragment = new FragmentTwo(); args.putString(FragmentTwo.ITEM_NAME, dataList.get(possition) .getItemName()); args.putInt(FragmentTwo.IMAGE_RESOURCE_ID, dataList.get(possition) .getImgResID()); break; default: break; } fragment.setArguments(args); FragmentManager frgManager = getFragmentManager(); frgManager.beginTransaction().replace(R.id.content_frame, fragment) .commit(); mDrawerList.setItemChecked(possition, true); //mDrawerList.getChildAt(possition).setBackgroundResource(R.drawable.activated_background); setTitle(dataList.get(possition).getItemName()); mDrawerLayout.closeDrawer(mDrawerList); } @Override public void setTitle(CharSequence title) { mTitle = title; getActionBar().setTitle(mTitle); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Sync the toggle state after onRestoreInstanceState has occurred. mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Pass any configuration change to the drawer toggles mDrawerToggle.onConfigurationChanged(newConfig); } @Override public boolean onOptionsItemSelected(MenuItem item) { // The action bar home/up action should open or close the drawer. // ActionBarDrawerToggle will take care of this. if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } return false; } private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (dataList.get(position).getTitle() == null) { SelectItem(position); } } } } 

This is the standard color in the activated element that I DO NOT WANT!

enter image description here

I want this: # f2f8ee

+6
source share
3 answers

Looks nice...

in your Java code that the list is on, call myListView.setItemChecked(position, true);

In addition, the color that you set for state_activated is the same as when the box is in normal state. Is this intended? ...

Create an xml file using TextView

nav_drawer_item.xml

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android"> android:id="@+id/textId" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/[your_selector]" /> 

in getview() for your adapter

 @Override public View getView(int position, View convertView, ViewGroup parent) { TextView view = (TextView) LayoutInflater.from(getContext()).inflate(R.layout.nav_drawer_item); view.setText("whatever_text"); return view; } 
+2
source

check out this example of a custom navigation box

inside onclick

  SelectItem.get(position).setColor(getResources().getColor("your color")); 

http://www.tutecentral.com/android-custom-navigation-drawer/

+2
source

this is how I did it and it works, the brief concept maintains the position of the selected item in the adapter and calls notifyDataSetChanged when notifyDataSetChanged called, the notifyDataSetChanged method getView called again and in the view mode the position of the position in the selected position changes the appearance of the background. See this for more details.

If you have any confusion, feel free to ask.

0
source

All Articles