zoukankan      html  css  js  c++  java
  • android中NavigationView(Design Support)的使用

    NavigationView可以实现美观的菜单功能展示,下面看一下怎么使用NavigationView

    先是主Activity

    activity_main.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 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:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">
    
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary"
            android:minHeight="?attr/actionBarSize"
            android:theme="?attr/actionBarTheme" />
    
        <android.support.v4.widget.DrawerLayout
            android:id="@+id/drawer1"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <android.support.constraint.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">
    
            </android.support.constraint.ConstraintLayout>
    
                <android.support.design.widget.NavigationView
                    android:id="@+id/navMenu"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_gravity="start"
                    app:headerLayout="@layout/main_header"
                    app:menu="@menu/menu1">
                </android.support.design.widget.NavigationView>
        </android.support.v4.widget.DrawerLayout>
    
    
    </LinearLayout>

    这个布局是这样的:

    最外层是一个上下结构的LinearLayout,从上到下依次是一个Toolbar、一个DrawerLayout

    DrawerLayout包括一个ConstraintLayout主界面和一个NavigationView抽屉界面

    NavigationView导航菜单包括一个头部,以及头部以下的菜单部分

    然后需要添加NavigationView导航菜单的头部,以及菜单:

    头部main_header.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 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">
    
        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="150dp"
            android:layout_height="150dp"
            android:layout_weight="1"
            android:paddingTop="10dp"
            android:paddingBottom="10dp" />
    </LinearLayout>

    这个头部只有一个ImageView,我先不为这个ImageView指定图片资源,待会我动态指定资源,以便于将这个图片显示成圆形的

    导航菜单menu1.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:android="http://schemas.android.com/apk/res/android">
    
        <group android:checkableBehavior="single">
            <item
                android:id="@+id/editItem"
                android:icon="@android:drawable/ic_menu_edit"
                android:title="编辑"
                app:showAsAction="always" />
            <item
                android:id="@+id/helpItem"
                android:icon="@android:drawable/ic_menu_help"
                android:title="帮助"
                app:showAsAction="always" />
            <item
                android:id="@+id/deleteItem"
                android:icon="@android:drawable/ic_menu_delete"
                android:title="删除"
                app:showAsAction="always" />
        </group>
    </menu>

    这个菜单是有一个group菜单组,里面嵌套了三个item菜单项,注意group组有一个重要的属性android:checkableBehavior="single",这个一定要添加,不然到时候选中效果显示不出来。

    最后就是主Activity的java类了

    MainActivity.java:

     1 package com.example.chenrui.app1;
     2 
     3 import android.graphics.BitmapFactory;
     4 import android.support.annotation.NonNull;
     5 import android.support.design.widget.NavigationView;
     6 import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
     7 import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
     8 import android.support.v4.widget.DrawerLayout;
     9 import android.support.v7.app.ActionBarDrawerToggle;
    10 import android.support.v7.app.AppCompatActivity;
    11 import android.os.Bundle;
    12 import android.support.v7.widget.Toolbar;
    13 import android.view.MenuItem;
    14 import android.view.View;
    15 import android.widget.ImageView;
    16 
    17 public class MainActivity extends AppCompatActivity {
    18 
    19     @Override
    20     protected void onCreate(Bundle savedInstanceState) {
    21         super.onCreate(savedInstanceState);
    22         setContentView(R.layout.activity_main);
    23 
    24         Toolbar toolbar = findViewById(R.id.toolbar1);
    25         setSupportActionBar(toolbar);
    26         getSupportActionBar().setHomeButtonEnabled(true);
    27         getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    28 
    29         final DrawerLayout drawerLayout = findViewById(R.id.drawer1);
    30         ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.open,R.string.close) {
    31             @Override
    32             public void onDrawerOpened(View drawerView) {
    33                 super.onDrawerOpened(drawerView);
    34             }
    35 
    36             @Override
    37             public void onDrawerClosed(View drawerView) {
    38                 super.onDrawerClosed(drawerView);
    39             }
    40         };
    41         toggle.syncState();
    42         drawerLayout.addDrawerListener(toggle);
    43 
    44         final NavigationView navMenu = findViewById(R.id.navMenu);
    45         navMenu.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
    46             @Override
    47             public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
    48                 menuItem.setChecked(true);
    49                 drawerLayout.closeDrawers();
    50                 return true;
    51             }
    52         });
    53 
    54         ImageView imageView = navMenu.getHeaderView(0).findViewById(R.id.imageView1);
    55         RoundedBitmapDrawable bitmapDrawable = RoundedBitmapDrawableFactory.create(getResources(),BitmapFactory.decodeResource(getResources(),R.drawable.img01));
    56         bitmapDrawable.setCircular(true);
    57         imageView.setImageDrawable(bitmapDrawable);
    58     }
    59 }

    第24到42行代码是指定Activity的菜单栏,并且为菜单栏添加切换抽屉界面显示或隐藏的按钮

    第44到52行代码是响应NavigationView选择事件的,选择一个菜单项,会把对应菜单项置为选中状态,并且隐藏抽屉界面,这个里面还应该有菜单要执行的其他动作,我这里是示例,所以没有做别的操作

    第54到57行代码是为NavigationView的头部图片动态指定一个图片资源,并且把图片改成圆角的,注意第54行代码查找图片的方式,因为图片位于NavigationView组件的headerLayout中,无法直接通过findViewById找到这个图片,需要先找到NavigationView组件头部的View,然后通过头部的View找到图片组件。这里是使用了RoundedBitmapDrawable来实现圆角图片的,用起来还是比较简单的。

    最后看一下执行的效果:

  • 相关阅读:
    mysql索引
    springboot mybatis 后台框架平台 shiro 权限 集成代码生成器
    java 企业网站源码模版 有前后台 springmvc SSM 生成静态化
    java springMVC SSM 操作日志 4级别联动 文件管理 头像编辑 shiro redis
    activiti工作流的web流程设计器整合视频教程 SSM和独立部署
    .Net Core中的ObjectPool
    文件操作、流相关类梳理
    .Net Core中的配置文件源码解析
    .Net Core中依赖注入服务使用总结
    消息中间件RabbitMQ(一)
  • 原文地址:https://www.cnblogs.com/modou/p/10302563.html
Copyright © 2011-2022 走看看