DrawerLayout 使用

来源:互联网 发布:手机号码 java正则式 编辑:程序博客网 时间:2024/06/05 18:25

1. 引用库

compile ‘com.android.support:support-v4:23.3.0’

2. DrawerLayout

DrawerLayout 是谷歌官方出的侧滑栏菜单。
侧滑菜单可以根据手势展开与隐藏(drawerLayout自身特性),主内容区的内容可以随着菜单的点击而变化(这需要使用者自己实现)。

2.1DrawerLayout 使用

1.drawerLayout其实是一个布局控件,跟LinearLayout等控件是一种东西,但是drawerLayout带有滑动的功能。只要按照drawerLayout的规定布局方式写完布局,就能有侧滑的效果。

注意:
- 主内容区的布局代码要放在侧滑菜单布局的前面,这可以帮助DrawerLayout判断谁是侧滑菜单,谁是主内容区;
- 侧滑菜单的部分的布局(这里是ListView)可以设置layout_gravity属性,他表示侧滑菜单是在左边还是右边。

    2. 侧滑菜单可以自己写布局,也可以使用NavigationView     使用NavigationView 的话,其中    android:layout_gravity="start"    app:headerLayout="@layout/navigation_header"    app:menu="@menu/menu_drawer"

app:headerLayout 是侧滑栏中标题 部分。
app:menu 是侧滑栏中菜单部分。

java代码:

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);        mActoinBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close);        mActoinBarDrawerToggle.syncState();        mDrawerLayout.addDrawerListener(mActoinBarDrawerToggle);

布局文件代码

<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.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:id="@+id/drawer_layout"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:fitsSystemWindows="true"    tools:context="com.lq.materialdesigntest.RecyclerToolBarActivity">    <android.support.design.widget.CoordinatorLayout        android:id="@+id/maincontent"        android:layout_width="match_parent"        android:layout_height="match_parent">        <android.support.design.widget.AppBarLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:theme="@style/AppTheme.AppBarOverlay">            <android.support.v7.widget.Toolbar                android:id="@+id/toolbar"                android:layout_width="match_parent"                android:layout_height="?attr/actionBarSize"                android:background="?attr/colorPrimary"                app:layout_scrollFlags="scroll|enterAlways"                app:popupTheme="@style/AppTheme.PopupOverlay" />            <android.support.design.widget.TabLayout                android:id="@+id/tabs"                android:layout_width="match_parent"                android:layout_height="wrap_content" />        </android.support.design.widget.AppBarLayout>        <include layout="@layout/content_materialdesign" />        <android.support.design.widget.FloatingActionButton            android:id="@+id/fab"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="bottom|end"            android:layout_margin="@dimen/fab_margin"            android:src="@android:drawable/ic_dialog_email" />    </android.support.design.widget.CoordinatorLayout>    <android.support.design.widget.NavigationView        android:id="@+id/navigation_view"        android:layout_width="wrap_content"        android:layout_height="match_parent"        android:layout_gravity="start"        app:headerLayout="@layout/navigation_header"        app:menu="@menu/menu_drawer">    </android.support.design.widget.NavigationView></android.support.v4.widget.DrawerLayout>

2.2 DrawLayout 两种效果

效果一和效果二的区别 drawerLayout 跟 ActionBar 的位置区别,
效果一会覆盖 ActionBar,
效果二显示在ActionBar 下方.

2.2.1 有Toolbar

NoActionBarAppTheme: 适用使用 ToolBar 来代替 ActionBar 的Activity

参考以上代码。

2.2.2 没有toolBar

AppTheme :适用在使用 ActionBar上的 Activity.
注意代码:

1.布局中没有toolbar 了
2.代码中加actionbar

  drawerLayout= (DrawerLayout) findViewById(R.id.drawer);        getSupportActionBar().setHomeButtonEnabled(true);        getSupportActionBar().setDisplayHomeAsUpEnabled(true);        ActionBarDrawerToggle actionBarDrawerToggle=new ActionBarDrawerToggle(this,drawerLayout,R.string.open_string,R.string.close_string);        actionBarDrawerToggle.syncState();       drawerLayout.setDrawerListener(actionBarDrawerToggle);

注意右上角的 汉堡包和返回按钮操作代码如下:

在 Activity onOptionsItemSelected 方法 int id = item.getItemId();        //noinspection SimplifiableIfStatement        if (id == android.R.id.home) {            if(  drawerLayout.isDrawerOpen(GravityCompat.START)                    ){                drawerLayout.closeDrawers();            }else{                drawerLayout.openDrawer(GravityCompat.START);            }            return true;        }        return super.onOptionsItemSelected(item);

2.NavigationView

NavigationView 一般配合DrawerLayout
private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {

            switch (item.getItemId()) {                case R.id.navigation_item_add:                    mViewPager.setCurrentItem(0);                    break;                case R.id.navigation_item_blog:                    mViewPager.setCurrentItem(1);                    break;                case R.id.navigation_item_about:                    mViewPager.setCurrentItem(2);                    break;                default:                    break;            }            item.setChecked(true);            mDrawerLayout.closeDrawers();            return true;        }    });}

参考链接

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0925/1713.html

http://www.jianshu.com/p/3fe2acac0ddb

我的github demo地址:

https://github.com/lengqi19860101/MaterialDesignPractice.git

0 0