studio personalizado onnavigationitemselected example ejemplo editar desplegable android navigationview android-navigationview

personalizado - navigationview android



Cómo agregar vistas personalizadas en la nueva NavigationView (6)

Estoy tratando de agregar un interruptor como elemento de menú en NavigationView como este

Usé el atributo actionViewClass pero solo muestra el título.

<item android:id="@+id/navi_item_create_notifications_sound" android:title="Notifications Sounds" xmlns:app="http://schemas.android.com/apk/res-auto" app:actionViewClass="android.support.v7.widget.SwitchCompat" app:showAsAction="always" />



Intenta envolver tu Switch en un archivo de Layout por separado:

Menú:

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/menu_switch" android:title="Switch Title" app:actionLayout="@layout/layout_my_switch" app:showAsAction="always" /> </menu>

Cambiar: "layout_my_switch.xml"

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.SwitchCompat android:id="@+id/my_switch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" /> </RelativeLayout>


Solución simple mientras usa NavigationView

<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:menu="@menu/activity_main_drawer"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:orientation="horizontal"> <android.support.v7.widget.SwitchCompat android:id="@+id/mSwitch" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:text="Night Mode" /> </LinearLayout> </android.support.design.widget.NavigationView>


Utilicé el diseño Abajo en Diseño de cajones donde se ha usado el código de Vista de navegación.

<android.support.design.widget.NavigationView android:id="@+id/navi_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start|top" android:background="@color/navigation_view_bg_color" app:theme="@style/NavDrawerTextStyle"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/drawer_header" /> <include layout="@layout/navigation_drawer_menu" /> </LinearLayout> </android.support.design.widget.NavigationView>


La nueva biblioteca de soporte 23.1

permite usar una vista personalizada para los elementos en la Vista de navegación usando la aplicación: actionLayout o usando MenuItemCompat.setActionView ()

Así es como logré mostrar un SwitchCompat

menu_nav.xml

<?xml version="1.0" encoding="utf-8"?>

<group android:id="@+id/first" android:checkableBehavior="single"> <item android:id="@+id/navi_item_1" android:icon="@drawable/ic_feed_grey_500_24dp" android:title="Feed" /> <item android:id="@+id/navi_item_2" android:icon="@drawable/ic_explore_grey_500_24dp" android:title="Explore" /> <item android:id="@+id/navi_item_4" android:icon="@drawable/ic_settings_grey_500_24dp" android:title="Settings" /> </group> <group android:id="@+id/second" android:checkableBehavior="single"> <item xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navi_item_create_notifications_sound" android:title="Notifications Sounds" app:actionLayout="@layout/menu_swich" app:showAsAction="always" /> </group>

menu_switch.xml

<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.SwitchCompat xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="right|center_vertical" app:buttonTint="@color/colorPrimary" app:switchPadding="@dimen/spacing_small" />

Para obtener la Vista y asignarle eventos, debe hacer:

SwitchCompat item = (SwitchCompat) navigationView.getMenu().getItem(3).getActionView(); item.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { Logr.v(LOG_TAG, "onCheckedChanged" + isChecked); } });


[Actualización 03-03-2017] La ​​respuesta está desactualizada. No refieras esto Referir la respuesta aceptada.

Desafortunadamente, actualmente NavigationView no permite mucho personalización ...

Tienes que tomar el ListView personalizado en NavigationView.

<android.support.design.widget.NavigationView android:id="@+id/navView" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start"> <ListView android:layout_width="match_parent" android:layout_height="match_parent"/> </android.support.design.widget.NavigationView>

Y cree una celda para esta vista de lista tomando TextView hacia el lado izquierdo y SwitchCompact hacia el lado derecho.

Espero que te ayude ...