当前位置: 移动技术网 > IT编程>移动开发>Android > Android中NavigationView的使用与相关问题解决

Android中NavigationView的使用与相关问题解决

2019年07月24日  | 移动技术网IT编程  | 我要评论

吕慎恒,贵州省望谟县,毛主席语录dj

一、基本使用

1. navigationview 在 design 库中,添加依赖(最新的是 23.2.0);

compile 'com.android.support:design:23.1.1' 

2. 然后在 drawerlayout 布局中添加 navigationview ;

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

<android.support.v4.widget.drawerlayout
 android:id="@+id/drawer_layout"
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:layout_width="match_parent"
 android:layout_height="match_parent">

 <framelayout
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <linearlayout
   android:id="@+id/main"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical">

   <android.support.v7.widget.toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionbarsize"
    android:background="@color/colorprimary"
    app:popuptheme="@style/themeoverlay.appcompat.light"
    app:theme="@style/themeoverlay.appcompat.dark.actionbar"/>

   ......
   
  </linearlayout>
 </framelayout>

 <android.support.design.widget.navigationview
  android:id="@+id/navigation"
  android:layout_width="wrap_content"
  android:layout_height="match_parent"
  android:layout_gravity="start"
  app:headerlayout="@layout/nav_header"
  app:menu="@menu/activity_main_drawer"/>

</android.support.v4.widget.drawerlayout>

其中需要注意给 navigationview 设置 android:layout_gravity="start" 属性。

3.然后注意到 navigationview 其实是分两个部分的,一个是头部,一个是下面的菜单列表部分

如下图所示:

其中头部通过 app:headerlayout="@layout/nav_header" 属性添加,nav_header 的布局如下:

<?xml version="1.0" encoding="utf-8"?>
<framelayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="192dp"
    android:theme="@style/themeoverlay.appcompat.dark">

 <imageview
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="@drawable/nav_header_bg"
  android:scaletype="centercrop"/>

 <imageview
  android:layout_width="96dp"
  android:layout_height="96dp"
  android:layout_gravity="bottom"
  android:layout_marginbottom="36dp"
  android:padding="8dp"
  android:src="@drawable/ic_avatar"/>

 <textview
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_gravity="bottom"
  android:padding="16dp"
  android:text="jaeger"
  android:textappearance="@style/textappearance.appcompat.body1"/>

</framelayout>

下面的菜单列表部分是一个 menu 文件,通过 app:menu="@menu/activity_main_drawer"属性添加。

activity_main_drawer.xml 文件在 menu 文件夹下,内容为:

<?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_camera"
   android:icon="@drawable/ic_menu_camera"
   android:title="import"/>
  <item
   android:id="@+id/nav_gallery"
   android:icon="@drawable/ic_menu_gallery"
   android:title="gallery"/>
  <item
   android:id="@+id/nav_slideshow"
   android:icon="@drawable/ic_menu_slideshow"
   android:title="slideshow"/>
  <item
   android:id="@+id/nav_manage"
   android:icon="@drawable/ic_menu_manage"
   android:title="tools"/>
 </group>

 <item android:title="communicate">
  <menu>
   <item
    android:id="@+id/nav_share"
    android:icon="@drawable/ic_menu_share"
    android:title="share"/>
   <item
    android:id="@+id/nav_send"
    android:icon="@drawable/ic_menu_send"
    android:title="send"/>
  </menu>
 </item>

</menu>

4. 菜单列表的点击事件

菜单列表的点击事件设置代码如下:

navigationview.setnavigationitemselectedlistener(new navigationview.onnavigationitemselectedlistener() {
   @override
   public boolean onnavigationitemselected(menuitem item) {
    switch (item.getitemid()){
     case r.id.nav_personal_info:
      // do something
      break;
     ...
    }
    return false;
   }
  });

至此,navigationview 的基本使用就差不多搞定了,效果就是前面图片显示的效果。

以下是使用过程中遇到的问题及解决方式。

一、菜单图标颜色被渲染成其他颜色

navigationview默认会按照 android 设计规范,将菜单里的图标渲染成itemicontint所设置的颜色。如果你没有设置这个属性,则会渲染成它默认的深灰色。如果不想图标颜色被渲染,可通过以下代码解决:

   navigationview.setitemicontintlist(null);

二、菜单图标与文字的间距过大

navigationview的菜单中,图标与文字的间距为32dp,但是通常与我们的设计师出的效果不同,这时可以通过重写以下属性来进行设置:

 <dimen name="design_navigation_icon_padding" tools:override="true">16dp</dimen>

总结

以上就是这篇文章的全部内容了,希望本文的内容对各位android开发者们能有所帮助,如果有疑问大家可以留言交流。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网