本文转自: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. Morgan Stanley telephone interview

    Today is Monday, April 28. I get a telephone call from Morgan Stanley in Shanghai. My examiner is a ...

  2. vim plugin 原理

    vim 个性化设置与功能扩展均通过 script 来实现,这种 script 又叫 plugin.plugin 是 vim 的核心与精髓. 最常用的配置文件 vimrc,也是一种 plugin.换句话 ...

  3. PDF.NET+EasyUI实现只更新修改的字段

    PDF.NET 在我看来是目前最简单易用而且高效的orm框架之一,感谢作者深蓝医生 实现的功能是easyui的行内编辑,用到了爱看书不识字的datagrid仿extjs的行内编辑 都是牛人啊. 201 ...

  4. ajax GET和POST请求web api 的几种方式

    GET请求 1.无参数get请求 一般get请求有两种写法,一种是 $.get()   一种是$.ajax({type:"get"}), 我个人比较喜欢用后者. 下面例子主要是ge ...

  5. css3实现垂直居中,水平

    .box{ text-align:center; } .content{ margin-top:50%; transform:translateY(-50%);/**沿Y轴移动**/ } <di ...

  6. php文件上传大小限制设置

    配置选项说明: upload_max_filesize 所上传的文件的最大大小. post_max_size 设定 POST 数据所允许的最大大小. memory_limit 设定了一个脚本所能够申请 ...

  7. SQLServer数据库 导出表和导入sql脚本

    1.选择需要导出表的数据库--任务---生成脚本 2.显示:生成和发布脚本窗口--简介(某些可能关闭该页面的,可以省略该步骤),点击下一步 3.显示:生成和发布脚本窗口--选择对象--按照图片操作即可 ...

  8. List<>.Contains<>的用法

    List<Plan> Plans = new List<Plan>();//存放服务器中的当前用户所接受的项目计划列表. //Plan 类包含PlanID等属性. if (Pl ...

  9. (转载)MVC + JQUERY + AJAX的几种方式

    MVC + JQUERY + AJAX的几种方式 // 传过去一个简单值,获取一个简单值 $.ajax({            type: "GET",         url: ...

  10. Mvc学习笔记(3)

    控制器将处理后的数据"传"给视图的方式 public ActionResult Test() { List<Student> stuList = new List< ...