Cómo crear un cajón de navegación personalizado en Android

Hola, bash crear un cajón de navegación similar al cajón de navegación de la aplicación gmail. Sigo el sitio del desarrollador pero solo se especifica sobre la implementación básica. Pero necesito personalizar la navegación de acuerdo con mis especificaciones.

  1. Necesito agregar un encabezado para categorizar el elemento de la lista en Cajón
  2. Necesito un botón de opción para seleccionar algunas de mis opciones

¿Cómo puedo hacer esto?

El tutorial Android Custom Navigation Drawer (a través de archive.org) contiene un proyecto básico y personalizado . Este último muestra cómo configurar un Cajón de navegación como se muestra en la captura de pantalla:

NavegaciónDrawerCustom

El código fuente de los proyectos (a través de archive.org) está disponible para descargar.


El también es el Cajón de Navegación – Proyecto Live-O …

Cajón de navegación - Live-O

El código fuente del proyecto está disponible en GitHub.


La biblioteca MaterialDrawer tiene como objective proporcionar la implementación más fácil posible de un cajón de navegación para su aplicación. Proporciona una gran cantidad de personalizaciones listas para usar y también incluye un encabezado fácil de usar que se puede usar como AccountSwitcher.

Demo de biblioteca de materialDrawer


Tenga en cuenta que, entretanto, Android Studio tiene un proyecto de plantilla para crear una actividad de cajón de navegación como se muestra en la captura de pantalla.

Actividad de cajón de navegación

Este repository realiza un seguimiento de los cambios que se realizan en la plantilla.

Usé el diseño de abajo y pude lograr un diseño personalizado en la Vista de navegación.

      

La solución más fácil para mí fue:

Consideraciones:

  • Esta solución requiere una actividad de cajón de navegación autogenerada proporcionada por Android Studio.
  • Las clases DrawerItem , CustomDrawerAdapter y layout custom_drawer_item.xml se tomaron de este tutorial .

1. Crea esta clase para envolver el artículo personalizado del cajón:

 public class DrawerItem { String ItemName; int imgResID; public DrawerItem(String itemName, int imgResID) { super(); ItemName = itemName; this.imgResID = imgResID; } public String getItemName() { return ItemName; } public void setItemName(String itemName) { ItemName = itemName; } public int getImgResID() { return imgResID; } public void setImgResID(int imgResID) { this.imgResID = imgResID; } } 

2. Cree un diseño personalizado (custom_drawer_item.xml) para sus elementos del cajón:

           

3. Crea tu adaptador personalizado:

 import java.util.List; import android.app.Activity; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; public class CustomDrawerAdapter extends ArrayAdapter { Context context; List drawerItemList; int layoutResID; public CustomDrawerAdapter(Context context, int layoutResourceID, List listItems) { super(context, layoutResourceID, listItems); this.context = context; this.drawerItemList = listItems; this.layoutResID = layoutResourceID; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub DrawerItemHolder drawerHolder; View view = convertView; if (view == null) { LayoutInflater inflater = ((Activity) context).getLayoutInflater(); drawerHolder = new DrawerItemHolder(); view = inflater.inflate(layoutResID, parent, false); drawerHolder.ItemName = (TextView)view.findViewById(R.id.drawer_itemName); drawerHolder.icon = (ImageView) view.findViewById(R.id.drawer_icon); view.setTag(drawerHolder); } else { drawerHolder = (DrawerItemHolder) view.getTag(); } DrawerItem dItem = (DrawerItem) this.drawerItemList.get(position); drawerHolder.icon.setImageDrawable(view.getResources().getDrawable( dItem.getImgResID())); drawerHolder.ItemName.setText(dItem.getItemName()); return view; } private static class DrawerItemHolder { TextView ItemName; ImageView icon; } } 

4. En la clase autogenerada NavigationDrawerFragment método onCreateView , reemplace el adaptador autogenerado por esto:

 ArrayList dataList = new ArrayList(); dataList.add(new DrawerItem(getString(R.string.title_section1), R.drawable.ic_action_1)); dataList.add(new DrawerItem(getString(R.string.title_section2), R.drawable.ic_action_2)); dataList.add(new DrawerItem(getString(R.string.title_section3), R.drawable.ic_action_3)); mDrawerListView.setAdapter(new CustomDrawerAdapter( getActivity(), R.layout.custom_drawer_item, dataList)); 

Recuerde reemplazar R.string.title_sectionN y R.drawable.ic_action_N por sus propios recursos.

Puede personalizar fácilmente el cajón de navegación de Android una vez que sepa cómo se implementó. aquí hay un buen tutorial donde puedes configurarlo.

Esta será la estructura de su mainXML:

       

Puede personalizar esta vista de lista a su gusto agregando el encabezado. Y botones de radio.

Cajón de navegación de Android usando la actividad Acabo de seguir el ejemplo: http://antonioleiva.com/navigation-view/

Solo necesitas algunas personalizaciones:

 public class MainActivity extends AppCompatActivity { public static final String AVATAR_URL = "http://lorempixel.com/200/200/people/1/"; private DrawerLayout drawerLayout; private View content; private Toolbar toolbar; private NavigationView navigationView; private ActionBarDrawerToggle drawerToggle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dashboard); toolbar = (Toolbar) findViewById(R.id.toolbar); drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); initToolbar(); setupDrawerLayout(); content = findViewById(R.id.content); drawerToggle = setupDrawerToggle(); final ImageView avatar = (ImageView) navigationView.getHeaderView(0).findViewById(R.id.avatar); Picasso.with(this).load(AVATAR_URL).transform(new CircleTransform()).into(avatar); } private void initToolbar() { final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); final ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_black_24dp); actionBar.setDisplayHomeAsUpEnabled(true); } } private ActionBarDrawerToggle setupDrawerToggle() { return new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Sync the toggle state after onRestoreInstanceState has occurred. drawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Pass any configuration change to the drawer toggles drawerToggle.onConfigurationChanged(newConfig); } private void setupDrawerLayout() { drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); navigationView = (NavigationView) findViewById(R.id.navigation_view); navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { int id = menuItem.getItemId(); switch (id) { case R.id.drawer_home: Intent i = new Intent(getApplicationContext(), MainActivity.class); startActivity(i); finish(); break; case R.id.drawer_favorite: Intent j = new Intent(getApplicationContext(), SecondActivity.class); startActivity(j); finish(); break; } return true; } }); 

} Aquí está el diseño xml

        

Agregue drawer.xml en el menú

     ...   

Para abrir y cerrar el cajón agregue estos valores en string.xml

 Open Close 

drawer.xml

 enter code here 

    

Necesito agregar un encabezado para categorizar el elemento de la lista en Cajón

Personalice listView o use listView

Necesito un botón de opción para seleccionar algunas de mis opciones

Puede hacerlo sin modificar la implementación actual de NavigationDrawer , solo necesita crear un adaptador personalizado para su listView . Puede agregar un diseño principal como Drawer luego puede hacer cualquier diseño complejo dentro de ese modo.

Si está utilizando Android Studio , proporciona una herramienta muy simple para crear una actividad con un cajón de navegación.

Haga clic derecho en su paquete, vaya a New | Activity | Navigation Drawer Activity New | Activity | Navigation Drawer Activity

enter image description here

Puede BaseActivity nombre a esta BaseActivity para que cualquier actividad que desee tener con un cajón de navegación la extienda (suponiendo que la actividad no extienda aún otra clase). Para extender actividades, mira esto .

si ejecuta su aplicación, esto es lo que obtiene:

enter image description here

A partir de ahora, todo lo que necesita para personalizar los elementos en el cajón y agregar contenido a la main content view es seguir la documentación oficial o cualquiera de su elección.