您的位置:首页 > 移动开发 > Android开发

DrawerLayout NavigationView 实现侧滑(android MD 一)

2017-10-28 15:50 483 查看
实现侧滑的效果,采用md风格,用到的总要控件有

DrawerLayout和NavigationView



demo 下载地址

依赖MD系统库

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

**获取Navigation Header**


View headerView =

mNavigationView.inflateHeaderView(R.layout.drawer_header);



public class MainActivity extends AppCompatActivity 类

package com.example.navigationdemo;

import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
private DrawerLayout mDrawerlayout;
private NavigationView mNavigationView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mDrawerlayout = (DrawerLayout)findViewById(R.id.drawerlayout);
mNavigationView = (NavigationView) findViewById(R.id.navigationview);
mNavigationView.setItemIconTintList(null); //icon显示自身的颜色

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

ActionBar bar = getSupportActionBar();
bar.setHomeAsUpIndicator(R.mipmap.ic_launcher); //设置图标
bar.setDisplayHomeAsUpEnabled(true);

init();
}

private void init() {
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
MenuItem preItem = null;

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
if (preItem != null) {
preItem.setChecked(false);
}
item.setChecked(true);
Log.d("yw", "你点击了标题为" + item.getTitleCondensed() + "的菜单");
Toast.makeText(MainActivity.this, "你点击了标题为" + item.getTitleCondensed() + "的菜单", Toast.LENGTH_LONG).show();
mDrawerlayout.closeDrawers();
preItem = item;   //保存一下上一次点击的item
return false;
}
});

//获取navigationView的头部布局和里面的控件
View headerView = mNavigationView.getHeaderView(0);  //有些版本不兼容,headerView == null
// 可以用这个获取  View headerView = mNavigationView.inflateHeaderView(R.layout.drawer_header);
ImageView avatar = (ImageView) headerView.findViewById(R.id.avatar);
avatar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("yw", "你点击了头像");
mDrawerlayout.closeDrawers();
Toast.makeText(MainActivity.this, "你点击了头像", Toast.LENGTH_SHORT).show();
}
});
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.d("yw", item + "");
switch (item.getItemId()) {
case android.R.id.home:
mDrawerlayout.openDrawer(GravityCompat.START);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}


setNavigationItemSelectedListener:设置NavigationView里面的菜单Item点击事件;

getHeaderView(0); 获取NavigationView的头布局,然后通过findViewById得到具体的控件;

setItemIconTintList(null); //NavigationView里面的菜单Item的icon显示自身的颜色;

activity_main.xml 布局文件


<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawerlayout"
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" tools:context="com.example.navigationdemo.MainActivity">

<LinearLayout
android:orientation="vertical"
android:id="@+id/layout_content"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:text="我是内容"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

<!--  android:layout_marginRight="100dp"
android:layout_width="100dp"
设置抽屉的宽度-->
<android.support.design.widget.NavigationView
android:fitsSystemWindows="true"
android:layout_gravity="left"
android:id="@+id/navigationview"
app:headerLayout="@layout/header"
app:menu="@menu/drawer_menu"
android:layout_marginRight="100dp"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v4.widget.DrawerLayout>


NavigationView里的属性

app:headerLayout 指定相应的头布局;



app:menu 指定相应的菜单;



android:layout_gravity

可以指定左left滑出,右right滑出

android:layout_width=”100dp”

设置抽屉的宽度

header.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:background="@color/colorAccent"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/avatar"
android:layout_gravity="center"
android:src="@mipmap/ic_launcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:text="jack_yang"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>


menu_drawer.xml

<?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_home"
android:icon="@mipmap/ic_launcher"
android:title="Home"/>
<item
android:id="@+id/nav_messages"
android:icon="@mipmap/ic_launcher"
android:title="Messages"/>
<item
android:id="@+id/nav_friends"
android:icon="@mipmap/ic_launcher"
android:title="Friends"/>
<item
android:id="@+id/nav_discussion"
android:icon="@mipmap/ic_launcher"
android:title="Discussion"/>
</group>

<item android:title="Sub items">
<menu>
<item
android:icon="@mipmap/ic_launcher"
android:checkable="true"
android:title="Sub item 1"/>
<item
android:icon="@mipmap/ic_launcher"
android:checkable="true"
android:title="Sub item 2"/>
</menu>
</item>
</menu>


欢迎指点,共同进步。

demo 下载地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Navigation 侧滑