Android DrawerLayout 抽屉

原创 2015年06月03日 16:19:18

Android DrawerLayout 抽屉

DrawerLayout 在supportV4 Lib中,类似开源slidemenu一样,DrawerLayout父类为ViewGroup,自定义组件基本都是扩展这个类。
android.support.v4.widget.DrawerLayout

下面是个简单的用法演示。点左上角的按钮 打开抽屉菜单。

首页

这里写图片描述

点击对应的ITEM 切换对应的内容,内容显示使用Fragment,这里没用到ActionBar来做切换

<?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" >

    <!-- 这里是内容区域 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="55dp"
            android:background="#9370DB"
            android:orientation="horizontal" >

            <ImageView 
                android:id="@+id/slide"
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:scaleType="fitCenter" 
                android:layout_gravity="center_vertical"
                android:src = "@drawable/slide"
                />            

        </LinearLayout>

        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            >
        </FrameLayout>

    <!-- 抽屉内容 -->
    <ListView
        android:id="@+id/drawer_content"
        android:layout_width="280dp"
        android:layout_height="match_parent"
        android:listSelector="#336699"
        android:divider="#B0C4DE"  
        android:dividerHeight="1px"
        android:layout_gravity="start"
        android:background="#8470FF" />

</android.support.v4.widget.DrawerLayout>
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.widget.DrawerLayout;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class DrawerLayoutActivity extends FragmentActivity {

    private DrawerLayout mDrawerLayout;
    private ListView drawerContent;//抽屉内容


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

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawerContent = (ListView) findViewById(R.id.drawer_content);
        mDrawerLayout.setDrawerListener(new DemoDrawerListener());
        addHeader(drawerContent);//ListView Header头
        drawerContent.setAdapter(new MyAdapter());
        drawerContent.setOnItemClickListener(new DrawerItemClickListener());
        findViewById(R.id.slide).setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                mDrawerLayout.openDrawer(drawerContent);//打开抽屉内容
            }
        });

        //显示默认的HOME
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new HomeFragment()).commit();

    }

    private void addHeader(ListView mDrawer2) {
        View view = LayoutInflater.from(this).inflate(R.layout.list_header,null);
        mDrawer2.addHeaderView(view);
    }

    static String titles[] = { "主页", "公司", "附近", "设置" };

    class MyAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return titles.length;
        }

        @Override
        public Object getItem(int p) {
            return titles[p];
        }

        @Override
        public long getItemId(int arg0) {
            return 0;
        }

        @Override
        public View getView(int p, View contentView, ViewGroup arg2) {
            String title = titles[p];
            View v = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_list, null);
            TextView textView = (TextView) v.findViewById(R.id.text);
            textView.setText(title);
            return v;
        }

    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    }

    private class DrawerItemClickListener implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
            showFragmentById(position);
            mDrawerLayout.closeDrawer(drawerContent);
        }
    }

    //切换到对应的Fragment
    public void showFragmentById(int position) {
        Fragment f = null;
        switch (position) {
        case 1:
            f = new HomeFragment();
            break;
        case 2:
            f = new CompanyFragment();
            break;
        case 3:
            f = new NearFragment();
            break;
        case 4:
            f = new SettingFragment();
            break;
        default:
            break;
        }
        if (f == null) {
            return;
        }
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, f).commit();
    }

    //回调函数,打开或关闭时可以做一些事情
    private class DemoDrawerListener implements DrawerLayout.DrawerListener {
        @Override
        public void onDrawerOpened(View drawerView) { //打开时调用
        }

        @Override
        public void onDrawerClosed(View drawerView) { //关闭时调用
        }

        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {//滑动过程中
        }

        @Override
        public void onDrawerStateChanged(int newState) {
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        return super.onCreateOptionsMenu(menu);
    }

}

这里只写HomeFragment代码,其它几个内容都是一样的。

public class HomeFragment extends Fragment {

    public HomeFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.home_fg, container,false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        TextView textView = (TextView) view.findViewById(R.id.text);
        textView.setText("Home");
    }

}

home_fg.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

     <TextView 
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="4dp"
        android:textSize="20sp"
        android:textColor="#9370DB"
        android:textStyle="bold"
        android:layout_centerInParent="true"
        />

</RelativeLayout>
版权声明:本文为博主原创文章,未经博主允许不得转载。

Android使用DrawerLayout创建左右两个抽屉菜单

在Android support.v4 中有一个抽屉视图控件DrawerLayout。使用这个控件,可以生成通过在屏幕上水平滑动打开或者关闭菜单,能给用户一个不错的体验效果。 最近在项目中,设计...
  • u013260551
  • u013260551
  • 2015年04月24日 21:43
  • 749

安卓5.0之后抽屉布局DrawerLayout的

DrawerLayout的使用越来越广泛,也许有的朋友说我可以做一个侧滑面板,使用ViewDragHelper来写.当然,自己写的自定义控件扩展性更好,但是DrawerLayout也能满足一般的侧滑需...
  • github_37217206
  • github_37217206
  • 2017年01月06日 14:35
  • 1119

Android简单的自定义抽屉布局(DrawerLayout)

采用DrawerLayout的方法实现抽屉布局的效果,抽屉布局有两个部分,第一个部分为主内容区,如图中的包含底部菜单栏的部分。第二部分为侧边栏部分,左边部分。 对应xml布局如下:...
  • qq_20964593
  • qq_20964593
  • 2016年05月06日 23:42
  • 1714

Android使用DrawerLayout创建左右两个抽屉菜单

Android使用DrawerLayout创建左右两个抽屉菜单Google自带控件侧滑菜单DrawerLayout在Android support.v4 中有一个抽屉视图控件DrawerLayout。...
  • xubuhang
  • xubuhang
  • 2016年01月11日 14:58
  • 2089

android组件之DrawerLayout(抽屉导航)-- 侧滑菜单效果

一、 介绍 导航抽屉显示在屏幕的最左侧,默认情况下是隐藏的,当用户用手指从边缘向另一个滑动的时候,会出现一个隐藏的面板,当点击面板外部或者向原来的方向滑动的时候,抽屉导航就会消失了! 好了,这个抽屉就...
  • crazy1235
  • crazy1235
  • 2014年12月03日 14:25
  • 77432

Google官方抽屉DrawerLayout使用心得、踩坑经验以及定制化

基础使用 这里要介绍的是google的DrawerLayout,行为可见google官方应用如gmail,看手Q的抽屉,应该是根据android-undergarment项目来定制的一个控件。 G...
  • marktheone
  • marktheone
  • 2015年06月27日 17:49
  • 2812

DrawerLayout抽屉布局的使用 最简单的侧滑菜单实现

DrawerLayout抽屉布局的使用 最简单的侧滑菜单实现 之前项目中遇到需要实现侧滑菜单,自己动手写真是费劲,各种手势判断,各种事件监听,而且效果不是太好,后来知道DrawerLayout实现侧滑...
  • LANG791534167
  • LANG791534167
  • 2014年01月12日 18:55
  • 11113

【React Native开发】React Native控件之DrawerLayoutAndroid抽屉导航切换组件讲解(13)

(一)前言        【好消息】个人网站已经上线运行,后面博客以及技术干货等精彩文章会同步更新,请大家关注收藏:http://www.lcode.org         今天我们一起来看一下抽屉D...
  • jiangqq781931404
  • jiangqq781931404
  • 2016年01月28日 13:13
  • 7891

Android Studio自带模版:抽屉(DrawerLayout)布局

MainActivity.java package com.qiufeng.astest; import android.app.Activity; import android.support....
  • qf2613268
  • qf2613268
  • 2015年12月21日 17:23
  • 1929

DrawerLayout+ToolBar官方API实现仿网易V4.4.4导航抽屉

网易V4.4.4 的导航抽屉长啥样,我想在此无需多说,没见过的自己去体验吧。 当时吸引我的是左边滑动,箭头图标变菜单图标动画,这个非常不错。殊不知,Android5.0以上官方提供的API便可轻松实...
  • BigHulk
  • BigHulk
  • 2015年04月25日 02:50
  • 1429
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android DrawerLayout 抽屉
举报原因:
原因补充:

(最多只允许输入30个字)