para - menu principal android
¿Cómo crear un subnivel en el menú de navegación en Android? (4)
Una idea que tuve fue hacer que cada elemento del menú abriera otro fragmento con una transición. Debajo, el panel de navegación es solo una vista de lista dentro de un fragmento, ¿verdad? por lo tanto, inicie otro fragmento del adaptador de la lista de cajones de navegación.
Me gustaría lograr el mismo efecto de esta manera:
cuando haces clic en document / tutorial / support, el menú irá al menú de subnivel. No es una vista de lista expansible ni un elemento de submenú debajo del título del menú principal.
He intentado crear el menú usando una vista de navegación como esta:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_home"
android:icon="@drawable/ic_event"
android:title="Home" />
<item
android:id="@+id/nav_profile"
android:icon="@drawable/ic_dashboard"
android:title="Perfil" />
</group>
<item android:title="More Options">
<menu>
<item
android:icon="@drawable/ic_forum"
android:title="Forum" />
<item
android:icon="@drawable/ic_headset"
android:title="Headset" />
</menu>
</item>
</menu>
El problema es que no va al subnivel cuando hago clic en el título del menú principal. ¿Cómo lograr eso en Android? Muchas gracias
Creo que archivé el efecto deseado:
La idea detrás es clear()
menú existente y volver a inflateMenu
cada vez que el usuario haga clic en el elemento del menú, lo que debería conducir a un submenú. (Y al volver - haz más o menos lo mismo)
Como menú raíz ( activity_main_drawer.xml
), utilicé esto:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/action_item1"
android:icon="@drawable/ic_menu_camera"
android:title="Item 1" />
<item
android:id="@+id/action_expand"
android:icon="@drawable/ic_menu_gallery"
android:title="Sub Menu to expand" />
</group>
</menu>
Este es un submenú ( activity_submenu_drawer.xm
):
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="Go Back"
android:icon="@drawable/ic_back"
android:id="@+id/back_to_main"/>
<item
android:id="@+id/sub_item1"
android:icon="@drawable/ic_menu_share"
android:title="Subitem 1" />
<item
android:id="@+id/sub_item2"
android:icon="@drawable/ic_menu_send"
android:title="Subitem 2" />
</menu>
MainActivity.xml
:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main" />
</android.support.v4.widget.DrawerLayout>
Y aquí está la clase MainActivity
(que hace el cambio):
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
NavigationView navigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
.....
navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.inflateMenu(R.menu.activity_main_drawer);
navigationView.setNavigationItemSelectedListener(this);
}
....
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.action_expand) {
navigationView.getMenu().clear();
navigationView.inflateMenu(R.menu.activity_submenu_drawer);
} else if (id == R.id.back_to_main) {
navigationView.getMenu().clear();
navigationView.inflateMenu(R.menu.activity_main_drawer);
}
return true;
}
}
Subí mi prueba-proyecto a mi Dropbox. No dudes en echarle un vistazo.
Espero que ayude
Puede ser que esto te pueda ayudar
si enfrento este problema luego utilizaré el cajón de navegación del encabezado completo (diseñado por el vestuario) para la aplicación. y agregue una vista de lista ampliable u otro control animado u otro por qué es mi requisito real.
las ventajas de usar navegación personalizada. es que podemos establecer el diseño y la funcionalidad que necesitamos. si la lista de menú es simple, entonces el enfoque de batido es que use navegación por defecto. cajón como se define en el soporte de diseño lib.