DrawerLayout简单使用

一.DrawerLayout其实是一个布局空间,与linearLayout一样,区别是 DrawerLayout带有滑动功能

DrawerLayout分为侧边菜单和主内容区两部分,侧边菜单可以根据手势展开与隐藏,主内容区的部分可以随着菜单的点击而变化(需要自己实现)

使用注意事项:

主内容视图一定要是DrawerLayout的第一个子视图,就是抽屉没有打开时现实的布局

主内容视图宽度和高度需要match_parent
必须显示指定侧滑视图的android:layout_gravity属性android:layout_gravity = "start"时,从左向右滑出菜单;android:layout_gravity = "end"时,从右向左滑出菜单,不推荐使用left和right!!!
侧滑视图的宽度以dp为单位,不建议超过320dp(为了总能看到一些主内容视图)
设置侧滑时间:mDrawerLayout.setDrawerListener(DrawerLayout.DrawerListener)

//预览效果
DrawerLayout简单使用_第1张图片

首先添加依赖
在这里插入图片描述

android:id="@+id/drawer"
android:layout_width=“match_parent”
android:layout_height=“match_parent”
xmlns:android=“http://schemas.android.com/apk/res/android”>

android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:id="@+id/tab"/>
android:id="@+id/viewpager"
android:layout_width=“match_parent”
android:layout_height=“match_parent”/>



fragment即 侧滑菜单 ,LinearLayout即主内容

//MainActivity

import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
 DrawerLayout drawer;
 ViewPager viewPager;
 TabLayout tab;

ActionBarDrawerToggle toggle;
@Override

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    //初始化控件对象
    initView();
    
    //舒适化actionBar
    initActionBar();

    //初始化ViewPager
    initViewPager();

}


//设置我点击左上角,能够弹出侧边菜单
private void initActionBar() {
    //获取一个actionBar对象
    ActionBar actionBar = getSupportActionBar();
    //给左上角一张图片,4.0意思默认图片,给true就可以直接使用
    actionBar.setDisplayHomeAsUpEnabled(true);
    //有一类提供了绑定DrawerLayout功能
    toggle = new ActionBarDrawerToggle(this, drawer, R.string.open, R.string.close);
    //DrawerLayout 和 actionBar 关联
    toggle.syncState();
    //同步状态
    drawer.addDrawerListener(toggle);
}
//给左上角设置点击事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if(toggle.onOptionsItemSelected(item)){
        return true;
    }
    return super.onOptionsItemSelected(item);
}

//初始DrawerLayout,ViewPager,Fragment

private void initViewPager() {
    //新建两个fragment
    final List fragments =  new ArrayList<>();
    fragments.add(new FragmentA());
    fragments.add(new FragmentB());

    //将fragments放入一个viewpager适配器中
    MpagerAdapter adapter = new MpagerAdapter(getSupportFragmentManager());
    adapter.setFragments(fragments);

    viewPager.setAdapter(adapter);
    //tabLayout指示器有几个,创建几个
    tab.addTab(tab.newTab());
    tab.addTab(tab.newTab());

    //是tablayout和VIewPager
    tab.setupWithViewPager(viewPager);

    //给TabLayout指示器设置文本,万物从0开始
    tab.getTabAt(0).setText("视频");
    tab.getTabAt(1).setText("图片");
}
private void initView() {
    drawer = findViewById(R.id.drawer);
    viewPager = findViewById(R.id.viewpager);
    tab = findViewById(R.id.tab);

    //打开手势滑动
    drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

    //   DrawerLayout.LOCK_MODE_LOCKED_CLOSED   关闭手势滑动
}

}

//适配器

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;

import java.util.List;

class MpagerAdapter extends FragmentPagerAdapter {

private List fragments;

public MpagerAdapter(android.support.v4.app.FragmentManager supportFragmentManager) {
    super(supportFragmentManager);
}

//创建一个方法,接收外界传来的Fragment的集合
public void setFragments(List fragments) {
    this.fragments = fragments;
}
@Override
public Fragment getItem(int i) {
   Fragment fragment = fragments.get(i);
   return fragment;
}

@Override
public int getCount() {
    return fragments.size();
}

}

你可能感兴趣的:(DrawerLayout简单使用)