• 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来实现圆角图片的,用起来还是比较简单的。

    最后看一下执行的效果:

  • 相关阅读:
    Docker安装Zookeeper并进行操作
    JVM 完整深入解析
    synchronized关键字加到static静态方法和非static静态方法区别
    submit与execute区别
    ThreadPoolTaskExecutor和ThreadPoolExecutor区别
    Redis占用内存大小
    Java中CycliBarriar和CountdownLatch区别
    Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
    文本格式
    JavaScript事件
  • 原文地址:https://www.cnblogs.com/modou/p/10302563.html
Copyright © 2020-2023  润新知