一.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)
//预览效果
首先添加依赖
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer"
android:layout_width=“match_parent”
android:layout_height=“match_parent”
xmlns:android=“http://schemas.android.com/apk/res/android”>
<android.support.design.widget.TabLayout
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:id="@+id/tab"/>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width=“match_parent”
android:layout_height=“match_parent”/>
</android.support.v4.widget.DrawerLayout>
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<Fragment> 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<Fragment> fragments;
public MpagerAdapter(android.support.v4.app.FragmentManager supportFragmentManager) {
super(supportFragmentManager);
}
//创建一个方法,接收外界传来的Fragment的集合
public void setFragments(List<Fragment> fragments) {
this.fragments = fragments;
}
@Override
public Fragment getItem(int i) {
Fragment fragment = fragments.get(i);
return fragment;
}
@Override
public int getCount() {
return fragments.size();
}
}