Cómo crear un ActionBar personalizado con el cajón de navegación

Hola Quiero crear un ActionBar personalizado con el cajón de navegación en mi aplicación. En eso quiero mostrar la cara de la persona que registró mi aplicación dentro de un círculo en el lado derecho. Y la barra de navegación en el lado izquierdo.

Introduzca aquí la descripción de la imagen .

No funcionó con el cajón de navegación antes.

@Manikandan Pruébalo:

Lo primero que debes hacer es implementar y crear un cajón de navegación:

/res/layout/activity_main.xml

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- menu--> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- slide menu --> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="#111" android:choiceMode="singleChoice" /> </android.support.v4.widget.DrawerLayout> 

MainActivity.java

 public class MainActivity extends ActionBarActivity { private String[] optionsMenu; private DrawerLayout drawerLayout; private ListView drawerList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); opcionesMenu = new String[] {"Option 1", "Option 2", "Option 3"}; drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerList = (ListView) findViewById(R.id.left_drawer); drawerList.setAdapter(new ArrayAdapter<String>( getSupportActionBar().getThemedContext(), android.R.layout.simple_list_item_1, optionssMenu)); } //... } 

Para cada elemento en su menú navigationDrawer necesita agregar un Layout y un fragmento.

Fragment_1.xml (u otros elementos en el menú, fragment_2, fragment_3 ….)

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/TxtDetalle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/fragment1" /> </LinearLayout> 

Y su clase asociada para cada FragmentLayout

Fragment1.java (fragment2, Fragment3, Fragment4 …)

 import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment1 extends Fragment { @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_1, container, false); } } 

Hemos establecido el menú y fragmentos asociados con cada opción. El siguiente implementará la lógica requerida para responder al menú de eventos para cambiar la forma de fragmento pulsando cada opción.

Esto se hace mediante la implementación del control de menú onItemClick ListView evento, la lógica se agrega al final del método onCreate () de nuestro negocio principal.

 @Override protected void onCreate(Bundle savedInstanceState) { //... drawerList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Fragment fragment = null; switch (position) { case 1: fragment = new Fragment1(); break; case 2: fragment = new Fragment2(); break; case 3: fragment = new Fragment3(); break; } FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.content_frame, fragment) .commit(); drawerList.setItemChecked(position, true); tituloSeccion = opcionesMenu[position]; getSupportActionBar().setTitle(tituloSeccion); drawerLayout.closeDrawer(drawerList); } }); } 

Bueno, hemos implementado la funcionalidad básica, ahora i goint para agregar abrir y cerrar icono.

En MainActivity también.

 @Override protected void onCreate(Bundle savedInstanceState) { //... tituloApp = getTitle(); drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_navigation_drawer, R.string.drawer_open, R.string.drawer_close) { public void onDrawerClosed(View view) { getSupportActionBar().setTitle(tituloSeccion); ActivityCompat.invalidateOptionsMenu(MainActivity.this); } public void onDrawerOpened(View drawerView) { getSupportActionBar().setTitle(tituloApp); ActivityCompat.invalidateOptionsMenu(MainActivity.this); } }; drawerLayout.setDrawerListener(drawerToggle); } 

Ahora vamos a agregar botones en ActionBar (en tu camino la imagen del usuario) *

En su MainActivity también

 @Override public boolean onPrepareOptionsMenu(Menu menu) { boolean menuAbierto = drawerLayout.isDrawerOpen(drawerList); if(menuAbierto) menu.findItem(R.id.action_search).setVisible(false); else menu.findItem(R.id.action_search).setVisible(true); return super.onPrepareOptionsMenu(menu); } 

Con esto nos reunimos la mayoría de las recomendaciones de la guía de diseño, pero todavía tenemos que permitir al usuario abrir haciendo clic en el icono de la aplicación en el menú de la barra de acción.

Para ello, al final del método onCreate () se calificará la pulsación llamada setDisplayHomeAsUpEnabled icon () y setHomeButtonEnabled (), y agregará el evento onOptionsItemSelected () (encargado de procesar las pulsaciones de teclas en la barra de acción, una llamada inicial al método onOptionsItemSelected () Del objeto ActionBarDrawerToggle creado anteriormente, por lo que si devuelve true (significa que ha logrado un clic en el icono de la aplicación) sale directamente de este método.

MainActivity también

 public void onCreate(Bundle savedInstanceState) { //... getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } //... } 

Last for finish añadir este método:

 @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); drawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); drawerToggle.onConfigurationChanged(newConfig); } 

EDITAR TODO EL PROYECTO:

https://github.com/sgolivernet/curso-android-src/tree/develop/android-navigationdrawer

Puede agregar una vista personalizada a la barra de acción

 final ActionBar actionBar = getActionBar(); actionBar.setCustomView(R.layout.actionbar_custom_view_home); 

Añadir poner tu imageView y el título que te gustaría

GetSupportActionBar (). SetDisplayShowHomeEnabled (false); GetSupportActionBar (). SetDisplayShowTitleEnabled (false);

  LayoutInflater mInflater = LayoutInflater.from(this); View mCustomView = mInflater.inflate(R.layout.custom_action_bar_back, null); getSupportActionBar().setCustomView(mCustomView); getSupportActionBar().setDisplayShowCustomEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
  • Android: centra el título de la barra de herramientas
  • Título de la acción: Mostrar Título AND Icon
  • Cómo alinear el título en el centro de ActionBar en el tema predeterminado (Theme.Holo.Light)
  • Centro Alinee el título en la barra de acción utilizando estilos en android.
  • Barra de título de Android dejando espacio cuando se reanuda la aplicación
  • Android: la barra de progreso en el título de la ventana no se muestra
  • Cambiar el texto y el color de fondo en la barra de título (Android)?
  • La barra de título sigue apareciendo, incluso con requestWindowFeature o android: theme
  • ¿Cómo puedo añadir un spinner a la barra de título de una actividad?
  • Cómo quitar la barra de título de Actividad que extiende ActionBarActivity o AppcompatActivity con tema de diálogo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.