本文转自:http://www.apkbus.com/android-117148-1-1.html

写在前面的话:
接触Android已经有一段时间了,自己积累的东西也算蛮多的。总结以往的经验,凡是关键性的问题,一般都是要查阅API来解决的。所以,笔者建议同学们认真阅读API和Guider,Android的开发API文档是最容易阅读的(至少笔者是这么认为的,也接触一些windows phone的开发基础)。
今天,笔者为大家介绍Android侧边栏的使用。我也接触了一些侧边栏的第三方牛人写的插件,确实也是不错的。笔者介绍的是在Android扩展的包中的组件DrawerLayout,是一个很好的侧边栏,支持手势打开。好了,下面简单介绍使用组件的方法。
包括的内容有:
1、手势打开侧边栏(手要从接近左边向右滑,这点不是很好用)
2、使用fragment的按钮来打开侧边栏
3、使用menu键来打开侧边栏。

首先,来看看布局文件:

  1. <android.support.v4.widget.DrawerLayout
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/main_layout"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent" >
  6.  
  7. <!-- 页面内容 -->
  8.  
  9. <FrameLayout
  10. android:id="@+id/main_content"
  11. android:layout_width="fill_parent"
  12. android:layout_height="fill_parent" >
  13. </FrameLayout>
  14.  
  15. <!-- 侧边栏的选项 -->
  16.  
  17. <ListView
  18. android:id="@+id/left_drawer"
  19. android:layout_width="150dp"
  20. android:layout_height="fill_parent"
  21. android:layout_gravity="start"
  22. android:background="@android:color/background_dark" />
  23.  
  24. </android.support.v4.widget.DrawerLayout>

再来看看Activiy中的内容:

  1. public class MainActivity extends FragmentActivity {
  2.  
  3. public DrawerLayout drawerLayout;// 侧边栏布局
  4. public ListView leftList;// 侧边栏内的选项
  5. public ArrayAdapter<String> arrayAdapter;
  6. private String[] items;
  7.  
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. initViews();
  13. }
  14.  
  15. // 初始化控件
  16. private void initViews() {
  17. drawerLayout = (DrawerLayout) findViewById(R.id.main_layout);
  18. items = getResources().getStringArray(R.array.left_array);
  19. leftList = (ListView) findViewById(R.id.left_drawer);
  20. arrayAdapter = new ArrayAdapter<String>(this, R.layout.list_item, items);
  21. leftList.setAdapter(arrayAdapter);
  22. leftList.setOnItemClickListener(itemListener);
  23. initFragments();
  24.  
  25. }
  26.  
  27. // 添加碎片
  28. private void initFragments() {
  29. FragmentManager manager = getSupportFragmentManager();
  30. FragmentTransaction transaction = manager.beginTransaction();
  31. DrawerFragment fragment = new DrawerFragment();
  32. // 设置在fragment中按钮来控制侧边栏的打开
  33. fragment.setDrawerLayout(drawerLayout, leftList);
  34. transaction.add(R.id.main_content, fragment);
  35. transaction.commit();
  36. }
  37.  
  38. // 选项点击事件
  39. OnItemClickListener itemListener = new OnItemClickListener() {
  40.  
  41. @Override
  42. public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {
  43. // 设置Activity的标题,这里只是用来做一个测试,你可以在这里用来处理单击侧边栏的选项事件
  44. setTitle(items[position]);
  45. // 关闭侧边栏
  46. drawerLayout.closeDrawer(leftList);
  47. Log.i("onItemSelected",
  48. "open?:" + drawerLayout.isDrawerOpen(leftList));
  49. }
  50.  
  51. };
  52.  
  53. @Override
  54. public boolean onKeyDown(int keyCode, KeyEvent event) {
  55. // TODO Auto-generated method stub
  56. // 使用menu键打开或关闭侧边栏
  57. if (keyCode == KeyEvent.KEYCODE_MENU) {
  58.  
  59. if (drawerLayout.isDrawerOpen(leftList)) {
  60. drawerLayout.closeDrawer(leftList);
  61. } else {
  62. drawerLayout.openDrawer(leftList);
  63. }
  64. }
  65. return super.onKeyDown(keyCode, event);
  66. }
  67.  
  68. }

还有内容填充的片段代码:

  1. public class DrawerFragment extends Fragment implements OnClickListener {
  2.  
  3. public DrawerLayout layout;
  4. public View view;
  5.  
  6. public DrawerFragment() {
  7. super();
  8. // TODO Auto-generated constructor stub
  9. }
  10.  
  11. public void setDrawerLayout(DrawerLayout layout, View view) {
  12. this.layout = layout;
  13. this.view = view;
  14. }
  15.  
  16. @Override
  17. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  18. Bundle savedInstanceState) {
  19. // TODO Auto-generated method stub
  20. View rootView = inflater.inflate(R.layout.fragment_layout, container,
  21. false);
  22. Button openBtn = (Button) rootView.findViewById(R.id.open);
  23. openBtn.setOnClickListener(this);
  24. return rootView;
  25. }
  26.  
  27. @Override
  28. public void onClick(View v) {
  29. // TODO Auto-generated method stub
  30. if (v.getId() == R.id.open) {
  31. // 打开侧边栏
  32. if (!layout.isDrawerOpen(view)) {
  33. layout.openDrawer(view);
  34. }
  35. }
  36. }
  37. }

具体的使用效果图如下:

源码:http://pan.baidu.com/s/1mrdCx

Android 侧边栏(使用Support Library 4提供的扩展组件)的更多相关文章

  1. Android应用Design Support Library完全使用实例

    阅读目录 2-1 综述 2-2 TextInputLayout控件 2-3 FloatingActionButton控件 2-4 Snackbar控件 2-5 TabLayout控件 2-6 Navi ...

  2. 安卓高级3 Android应用Design Support Library完全使用实例

    原作者:http://www.open-open.com/lib/view/open1433385856119.html 1 背景 上周一年一度的Google IO全球开发者大会刚刚结束,Google ...

  3. Android material design support library -- CollapsingToolbarLayout简介

    本文是codetrick上material design support library教程的第三篇,主要讲的是CollapsingToolbarLayout的概念和应用方法. 原文链接:Materi ...

  4. Android Studio:Support Library依赖包的版本号

    当我们用RecyclerView时,如果想用某一个特定的版本,怎样才能知道版本号呢?如果自己的笔记本中用过这个库,那么会保存在本地硬盘中. Android自身依赖包的版本号本地存放路径:  没有用过该 ...

  5. Android Meterial Design Support Library

    extends:http://inthecheesefactory.com/blog/android-design-support-library-codelab At the moment I be ...

  6. 【转】【翻】Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏

    转自:http://mrfufufu.github.io/android/2015/07/01/Codelab_Android_Design_Support_Library.html [翻]Andro ...

  7. Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏

    原文:Codelab for Android Design Support Library used in I/O Rewind Bangkok session--Make your app fanc ...

  8. Android Design Support Library: 学习CoordinatorLayout

    简述 CoordinatorLayout字面意思是"协调器布局",它是Design Support Library中提供的一个超级帧布局,帮助我们实现Material Design ...

  9. Material Design 开发利器:Android Design Support Library 介绍

    转自:https://blog.leancloud.cn/3306/ Android 5.0 Lollipop 是迄今为止最重大的一次发布,很大程度上是因为 material design —— 这是 ...

随机推荐

  1. ios paper for facebook 使用第三方库

    facebook paper使用的第三方库 Facebook Paper使用的第三方库 第三方库名 简介 链接 ACE code editor https://github.com/ajaxorg/a ...

  2. android中相关的图形类

    Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565.RGB888.作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低.我们理解为一种存储对象比较好 ...

  3. System V 信号量

    1 概述 计数信号量集semid_ds: struct semid_ds { struct ipc_perm sem_perm; struct sem *sem_base; //指向信号量结构数组 u ...

  4. Android从服务端获取json解析显示在客户端上面

    Android从服务端获取json解析显示在客户端上面 百度经验:jingyan.baidu.com 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Jso ...

  5. mysql 查找包含特定名字的表

    SELECT distinct TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE '%medias%'

  6. vi简单快键命令

    进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后 ...

  7. css盒子模型、文档流、相对与绝对定位、浮动与清除模型

    一.CSS中的盒子模型 标准模式和混杂模式(IE).在标准模式下浏览器按照规范呈现页面:在混杂模式下,页面以一种比较宽松的向后兼容的方式显示.混杂模式通常模拟老式浏览器的行为以防止老站点无法工作. h ...

  8. centos 基本操作(输入法安装,adls宽带连接,查找文件,模拟终端)

    centos 基本操作之输入法安装输入法启动终端,切换到超级管理员yum install "@Chinese Support"安装成功后,退出System->Preferen ...

  9. [C#]async/Await 使用小计

    如果指定使用 异步 或 异步 修饰符,方法是异步方法,可以实现以下两个函数.  • 清单异步方法可以使用 Await 或指定的 等待 悬挂点.  等待运算符通知编译器异步方法不能继续点的过去,直到等待 ...

  10. svg学习笔记(二)

    SMIL animation演示代码集锦 <svg width="1400" height="1600" xmlns="http://www.w ...