Nueva Navegación Cajón – cómo utilizar títulos y contadores?

Http://developer.android.com/design/patterns/navigation-drawer.html

He leído el tutorial para crear el cajón de navegación, pero ¿qué debo hacer para utilizar el título, los iconos y los contadores como parte de los elementos del cajón? Sólo veo en el ejemplo cómo controlar el texto.

Tienes que administrar la interfaz de usuario del cajón de navegación con un diseño específico. Una vez que usted envolvió su disposición de la actividad con el diseño del cajón de la navegación y agregó su listview, usted tiene que crear un nuevo layout.xml (envuelva y agregue todas las cosas que usted quiere y especifica en su primera vista de la lista esta disposición.

Ejemplos de diseño: https://gist.github.com/jordanblt/6220779

Una respuesta más específica sobre el título: ¿Cómo agregar un título en el diseño del cajón de navegación?

Esta respuesta supone que ya tiene un cajón de navegación de trabajo y sólo tiene que agregar iconos y cuenta

Así es como lo hago. Tomemos por ejemplo una aplicación de noticias. En su cajón de navegación tiene Local News , Foreign News Alien News y Alien News . Lo que necesita tener iconos, títulos y contadores es definir un adaptador personalizado y una clase de modelo.

La clase Model:

 public class NavDrawerItem { private String title; private int icon; private int count; private boolean isLocalNews; private boolean isForeignNews; private boolean isAlienNews; private boolean hasIcon; private boolean isCounterVisible = false; // boolean to set visibility of the counter public NavDrawerItem(){} public NavDrawerItem(String title, boolean hasICon, int icon, boolean isCounterVisible, boolean isLocalNews, boolean isForeignNews, boolean isAlienNews) { this.title = title; this.hasIcon = hasICon; this.icon = icon; this.isCounterVisible = isCounterVisible; this.setHasIcon(isHasIcon()); this.isLocalNews = isLocalNews; this.isForeignNews = isForeignNews; this.isAlienNews = isAlienNews; } public String getTitle(){ return this.title; } public int getIcon(){ return this.icon; } public int getCount(){ return this.count; } public boolean getCounterVisibility(){ return this.isCounterVisible; } public void setTitle(String title){ this.title = title; } public void setIcon(int icon){ this.icon = icon; } public void setCount(int count){ this.count = count; } public void setCounterVisibility(boolean isCounterVisible){ this.isCounterVisible = isCounterVisible; } public boolean isLocalNews() { return isLocalNews; } public boolean isForeignNews() { return isLocalNews; } public boolean isAlienNews() { return isAlienNews; } public boolean isHasIcon() { return hasIcon; } public void setHasIcon(boolean hasIcon) { this.hasIcon = hasIcon; } } 

A continuación, en el adaptador personalizado, haga lo siguiente:

 public class NavDrawerListAdapter extends BaseAdapter { private Context context; private ArrayList<NavDrawerItem> navDrawerItems; public NavDrawerListAdapter(Context context, ArrayList<NavDrawerItem> navDrawerItems){ this.context = context; this.navDrawerItems = navDrawerItems; } @Override public int getCount() { return navDrawerItems.size(); } @Override public Object getItem(int position) { return navDrawerItems.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); convertView = mInflater.inflate(R.layout.drawer_list_item, null); } ImageView imgIcon = (ImageView) convertView.findViewById(R.id.icon); TextView txtTitle = (TextView) convertView.findViewById(R.id.title); TextView countTxt = (TextView) convertView.findViewById(R.id.debtCounter); imgIcon.setImageResource(navDrawerItems.get(position).getIcon()); //I am getting the count of each news item from a database, //for this purpose just initialize them to any random number eg //localNewsCount = 56 int localNewsCount = databaseManager.getAllLocalNews().size(); int foreignNewsCount = databaseManager.getForeignNews().size(); int alienNewsCount = databaseManager.getAllAlienNews().size(); txtTitle.setText(navDrawerItems.get(position).getTitle()); // To display the count (number of news per item) in the navigation drawer, //first check whether count textview is set to visible or not. True means the item can have a counter if(navDrawerItems.get(position).getCounterVisibility() && navDrawerItems.get(position).isLocalNews()) { navDrawerItems.get(position).setCount(localNewsCount); countTxt.setText(String.valueOf(navDrawerItems.get(position).getCount())); } if(navDrawerItems.get(position).getCounterVisibility() && navDrawerItems.get(position).isForeignNews()){ navDrawerItems.get(position).setCount(foreignNewsCount); countTxt.setText(String.valueOf(navDrawerItems.get(position).getCount())); } if(navDrawerItems.get(position).getCounterVisibility() && navDrawerItems.get(position).isAlienNews()){ navDrawerItems.get(position).setCount(alienNewsCount); countTxt.setText(String.valueOf(navDrawerItems.get(position).getCount())); } if(!navDrawerItems.get(position).getCounterVisibility()) { countTxt.setVisibility(View.GONE); } if (!navDrawerItems.get(position).isHasIcon()) { imgIcon.setVisibility(View.GONE); } return convertView; } } 

Y luego en la actividad inicializar los elementos como este:

  // load slide menu items navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items); // nav drawer icons from resources TypedArray navMenuIcons = getResources() .obtainTypedArray(R.array.nav_drawer_icons); ArrayList<NavDrawerItem> navDrawerItems = new ArrayList<>(); //Create an array of navigation drawer items. //local news navDrawerItems.add(new NavDrawerItem( navMenuTitles[0], //Title true, //hasIcon navMenuIcons.getResourceId(0, -1), //Icon resource true, //is counter visible? true) //is localNews? false) //is foreignNews? false) //is alienNews? ); //Foreign news navDrawerItems.add(new NavDrawerItem( navMenuTitles[1], //Title true, //hasIcon navMenuIcons.getResourceId(1, -1), //Icon resource true, //is counter visible? false) //is localNews? true) //is foreignNews? false) //is alienNews? ); //Alien news, since we know nothing about aliens we won't add icons and counter navDrawerItems.add(new NavDrawerItem( navMenuTitles[2], //Title false, //hasIcon navMenuIcons.getResourceId(2, -1), //Icon resource false, //is counter visible? false) //is localNews? false) //is foreignNews? true) //is alienNews? ); 

En su archivo de recursos de cadena, añada esto:

 <array name="nav_drawer_icons"> <item>@drawable/ic_localnews</item> <item>@drawable/ic_foreignnews</item> <item>@drawable/ic_aliensnews</item> </array> <!-- Nav Drawer Menu Items --> <string-array name="nav_drawer_items"> <item> Local News </item> <item> Foreign News </item> <item> Alien News </item> </string-array> 
  • android - abre el cajón de navegación haciendo clic en el icono de la aplicación?
  • Menús dinámicos en NavigationView
  • Obteniendo el "puntero" a NavigationBarView.java por reflexión
  • ¿Cómo puedo utilizar el cajón de navegación sin fragmentos?
  • ¿Por qué aparece la barra de navegación en las aplicaciones de pantalla completa cuando se hace clic en el menú emergente?
  • Tamaño del artículo de menú personalizado y tamaño de texto en la vista de navegación
  • Cómo cambiar la vista predeterminada de la pestaña de navegación a la vista de pestaña personalizada?
  • Cómo ocultar la barra de navegación de forma permanente en la actividad android?
  • Cómo obtener la posición MenuItem en el listener usando el nuevo NavigationView
  • Localización fuera de línea basada en la aplicación Android
  • ¿Hay alguna manera de controlar las vistas dentro del encabezado de NavigationView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.