DrawerLayout简单使用

本文介绍了Android中DrawerLayout的使用方法,包括其作为布局容器的特性,如何创建侧边菜单,主内容区域的设置,以及注意事项。内容涵盖DrawerLayout与主内容视图的关系,侧滑视图的gravity属性,宽度限制,以及如何通过监听器控制滑动行为。示例代码展示了TabLayout与ViewPager的集成,以及如何创建和管理Fragment作为侧滑菜单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.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();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值