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" />
Luego hay un componente personalizado disponible en Synfusion
, llamado Cajón de navegación .
Puede encontrar la documentación respectiva here .
Hombre.! ellos también ofrecen una licencia comunitaria .
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 ...