1、主内容视图一定要是DrawerLayout的第一个子视图
2、主内容视图宽度和高度匹配父视图,即“match_parent”
3、必须显示指定抽屉视图(如ListView)的 android:layout_gravity 属性
    1)、 android:layout_gravity=“start”时,从左向右滑出菜单
    2)、 android:layout_gravity=“end” 时,从右向左滑出菜单
    3)、不推荐使用 “left”和“right”
4、抽屉视图的宽度以dp为单位,请不要超过320dp(为了总能看到一些主内容视图。

【知识点】

1、mDrawerLayout.setDrawerListener(DrawerLayout.DrawerListener);

2、ActionBarDrawerToggle是DrawerLayout.DrawerListener的具体实现类

1)、改变android.R.id.home图标(构造方法)

2)、Drawer拉出、隐藏,带有android.R.id.home动画效果(syncState())

3)、监听Drawer拉出、隐藏事件

3、覆写ActionBarDrawerToggle的onDrawerOpened()和onDrawerClosed()以监 听抽屉拉出或隐藏事件

4、覆写Activity的onPostCreate()和onConfigurationChanged()方法

【范例】

activity_main.xml

  1. <android.support.v4.widget.DrawerLayout
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/drawer_layout"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent" >
  6. <!-- The main content view -->
  7. <FrameLayout
  8. android:id="@+id/content_frame"
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent" />
  11. <!-- The navigation view -->
  12. <ListView
  13. android:id="@+id/left_drawer"
  14. android:layout_width="240dp"
  15. android:layout_height="match_parent"
  16. android:layout_gravity="start"
  17. android:background="#ffffcc"
  18. android:choiceMode="singleChoice"
  19. android:divider="@android:color/transparent"
  20. android:dividerHeight="0dp" />
  21. </android.support.v4.widget.DrawerLayout>

MainActivity.java

  1. public class MainActivity extends Activity implements OnItemClickListener {
  2. private DrawerLayout mDrawerLayout;
  3. private ListView mDrawerList;
  4. private ArrayList<String> menuLists;
  5. private ArrayAdapter<String> adapter;
  6. private ActionBarDrawerToggle mDrawerToggle;
  7. private String mTitle;
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. mTitle = (String) getTitle();
  13. mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
  14. mDrawerList = (ListView) findViewById(R.id.left_drawer);
  15. menuLists = new ArrayList<String>();
  16. for (int i = 0; i < 5; i++)
  17. menuLists.add("Android开发0" + i);
  18. adapter = new ArrayAdapter<String>(this,
  19. android.R.layout.simple_list_item_1, menuLists);
  20. mDrawerList.setAdapter(adapter);
  21. mDrawerList.setOnItemClickListener(this);
  22. mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
  23. R.drawable.ic_drawer, R.string.drawer_open,
  24. R.string.drawer_close) {
  25. @Override
  26. public void onDrawerOpened(View drawerView) {
  27. super.onDrawerOpened(drawerView);
  28. getActionBar().setTitle("请选择");
  29. invalidateOptionsMenu(); // Call onPrepareOptionsMenu()
  30. }
  31. @Override
  32. public void onDrawerClosed(View drawerView) {
  33. super.onDrawerClosed(drawerView);
  34. getActionBar().setTitle(mTitle);
  35. invalidateOptionsMenu();
  36. }
  37. };
  38. mDrawerLayout.setDrawerListener(mDrawerToggle);
  39. //开启ActionBar上APP ICON的功能
  40. getActionBar().setDisplayHomeAsUpEnabled(true);
  41. getActionBar().setHomeButtonEnabled(true);
  42. }
  43. @Override
  44. public boolean onPrepareOptionsMenu(Menu menu) {
  45. boolean isDrawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
  46. menu.findItem(R.id.action_websearch).setVisible(!isDrawerOpen);
  47. return super.onPrepareOptionsMenu(menu);
  48. }
  49. @Override
  50. public boolean onCreateOptionsMenu(Menu menu) {
  51. // Inflate the menu; this adds items to the action bar if it is present.
  52. getMenuInflater().inflate(R.menu.main, menu);
  53. return true;
  54. }
  55. @Override
  56. public boolean onOptionsItemSelected(MenuItem item) {
  57. //将ActionBar上的图标与Drawer结合起来
  58. if (mDrawerToggle.onOptionsItemSelected(item)){
  59. return true;
  60. }
  61. switch (item.getItemId()) {
  62. case R.id.action_websearch:
  63. Intent intent = new Intent();
  64. intent.setAction("android.intent.action.VIEW");
  65. Uri uri = Uri.parse("http://www.cnblogs.com/androidsj");
  66. intent.setData(uri);
  67. startActivity(intent);
  68. break;
  69. }
  70. return super.onOptionsItemSelected(item);
  71. }
  72. @Override
  73. protected void onPostCreate(Bundle savedInstanceState) {
  74. super.onPostCreate(savedInstanceState);
  75. //需要将ActionDrawerToggle与DrawerLayout的状态同步
  76. //将ActionBarDrawerToggle中的drawer图标,设置为ActionBar中的Home-Button的Icon
  77. mDrawerToggle.syncState();
  78. }
  79. @Override
  80. public void onConfigurationChanged(Configuration newConfig) {
  81. super.onConfigurationChanged(newConfig);
  82. mDrawerToggle.onConfigurationChanged(newConfig);
  83. }
  84. @Override
  85. public void onItemClick(AdapterView<?> arg0, View arg1, int position,
  86. long arg3) {
  87. // 动态插入一个Fragment到FrameLayout当中
  88. Fragment contentFragment = new ContentFragment();
  89. Bundle args = new Bundle();
  90. args.putString("text", menuLists.get(position));
  91. contentFragment.setArguments(args);
  92. FragmentManager fm = getFragmentManager();
  93. fm.beginTransaction().replace(R.id.content_frame, contentFragment)
  94. .commit();
  95. mDrawerLayout.closeDrawer(mDrawerList);
  96. }
  97. }

ContentFragment.java

  1. public class ContentFragment extends Fragment {
  2. private TextView textView;
  3. @Override
  4. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  5. Bundle savedInstanceState) {
  6. View view = inflater.inflate(R.layout.fragment_content, container, false);
  7. textView = (TextView) view.findViewById(R.id.textView);
  8. String text = getArguments().getString("text");
  9. textView.setText(text);
  10. return view;
  11. }
  12. }
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical" >
  7. <TextView
  8. android:id="@+id/textView"
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content"
  11. android:textSize="25sp" />
  12. </LinearLayout>

40、DrawerLayout使用详情的更多相关文章

  1. 遍历input。select option 选中的值

    <label> <input name="Fruit" type="radio" value="0" class=&quo ...

  2. [转]使用wireshark分析TCP/IP协议中TCP包头的格式

    本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述 TCP是面向连接的可靠传输协议,两个进程互发数 ...

  3. 才一年,H5的发展就成这样了......

    关于H5的发展,分享几个最近看到的惊人数据和新闻: 1.截至2015,有80%的App将全部或部分基于HTML5.这意味着大部分App的内容都将是以网页的形式呈现,典型的例子包括微信.Facebook ...

  4. Linux网络编程--wireshark分析TCP包头的格式

    摘要:     本文简介了TCP面向连接理论知识,具体讲述了TCP报文各个字段含义.并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述     TCP是面向连接的可靠传输 ...

  5. 迅为IMX6核心板兼容工业级、商业扩展级、Plus版本核心板

    IMX6核心板兼容单核.双核.四核.工业级.汽车级.iMX6Q最新Plus版本,可根据用户需求更换,百变定制,高端产品无忧! iMX6Q核心板(四核商业级) iMX6DL核心板(双核商业级) iMX6 ...

  6. ARM核心板_迅为imx6工控核心板_核心板中的小新潮

    ARM核心板_迅为imx6工控核心板_核心板中的小新潮核心板参数 尺寸 51mm*61mm CPU Freescale Cortex-A9 四核 i.MX6Q,主频 1.2 GHz 内存 2GB DD ...

  7. 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)

    摘要:     本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述     TCP是面向连接的可靠 ...

  8. Projected Coordinate Systems

    Coordinate Systems Projected Coordinate Systems This is an archive of a previous version of the ArcG ...

  9. 【Python】理想论坛帖子读取爬虫1.04版

    1.01-1.03版本都有多线程争抢DB的问题,线程数一多问题就严重了. 这个版本把各线程要添加数据的SQL放到数组里,等最后一次性完成,这样就好些了.但乱码问题和未全部完成即退出现象还在,而且速度上 ...

随机推荐

  1. css - font-size

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Jpa调用存储过程及参数

    public List<Object> findAllEntityListBySearch(Long inputInfoId, int flag) throws Exception { L ...

  3. ibatis常用的集中判断语句

    http://blog.csdn.net/liaomin416100569/article/details/5344483

  4. FD_SET 详解

    http://blog.csdn.net/stephen_yin/article/details/7441165

  5. codeforces Round #Pi (div.2) 567ABCD

    567A Lineland Mail题意:一些城市在一个x轴上,他们之间非常喜欢写信交流.送信的费用就是两个城市之间的距离,问每个城市写一封信给其它城市所花费的最小费用和最大的费用. 没什么好说的.直 ...

  6. JQuery常用操作实现方式

    http://www.cnblogs.com/guomingfeng/articles/2038707.html 一个优秀的 JavaScript 框架,一篇 jQuery 常用方法及函数的文章留存备 ...

  7. Redis_发布订阅(基础)

    目录 前言 生产者和消费者 发布和订阅 Java实现 注意 前言 随着业务复杂, 业务的项目依赖关系增强, 使用消息队列帮助系统降低耦合度.发布订阅(pub/sub)是一种消息通信模式,主要目的是解除 ...

  8. C++语言基础(2)-new和delete操作符

    在C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数.如下所示: ); //分配10个int型的内存空间 free(p); //释放内存 在C++中,这两个函数仍然可以使 ...

  9. docker的使用02

    自定义容器名称: docker run --name -i -t ubuntu /bin/bash docker ps -a 数据卷的使用 数据卷其实就是容器和宿主机目录之间的映射. 具体实现: su ...

  10. C#中基本类型占用字节数

    bool -> System.Boolean (布尔型,其值为 true 或者 false) byte -> System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ...