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.
.
- Cómo mostrar el título de la barra de acciones de Android sin que se produzca el truncamiento
- Añadir leyenda a la imagen en el nuevo whatsapp ver 2.11.399 (android)
- Cómo cambiar el color de la barra de título sin tema
- ¿Cómo puedo detectar un clic en el título de ActionBar?
- Cómo ocultar la barra de título desde el principio
No funcionó con el cajón de navegación antes.
- Android: ¿Cómo establecer un contexto generadoMenú título?
- Calcule el rumbo de la brújula / rumbo a la ubicación en Android
- Cómo deshabilitar la barra de estado o barra de notificación, pero no deshabilitar la barra de título en android?
- Android: cambia el título en ActionBar desde el Gaveta de navegación
- Cambio de la barra de título de Android de fondo
- Eliminación de un tono de llamada mediante programación en android
- Título de la actividad de Android vs Título de ActionBar
- Altura establecida para Android de la barra de título personalizada
@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);