Android DrawerLayout 抽屉

DrawerLayout 在supportV4 Lib在。类似的开源slidemenu如,DrawerLayout父类ViewGroup,自定义组件基本上都是扩展类。

android.support.v4.widget.DrawerLayout

以下是个简单的使用方法演示。点左上角的button 打开抽屉菜单。

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

  1. <?
  2. xml version="1.0" encoding="utf-8"?>
  3. <android.support.v4.widget.DrawerLayout
  4. xmlns:android="http://schemas.android.com/apk/res/android"
  5. xmlns:app="http://schemas.android.com/apk/res-auto"
  6. xmlns:tools="http://schemas.android.com/tools"
  7. android:id="@+id/drawer_layout"
  8. android:layout_width="match_parent"
  9. android:layout_height="match_parent" >
  10. <!-- 这里是内容区域 -->
  11. <LinearLayout
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content"
  14. android:orientation="vertical" >
  15. <LinearLayout
  16. android:layout_width="match_parent"
  17. android:layout_height="55dp"
  18. android:background="#9370DB"
  19. android:orientation="horizontal" >
  20. <ImageView
  21. android:id="@+id/slide"
  22. android:layout_width="48dp"
  23. android:layout_height="48dp"
  24. android:scaleType="fitCenter"
  25. android:layout_gravity="center_vertical"
  26. android:src = "@drawable/slide"
  27. />
  28. </LinearLayout>
  29. <FrameLayout
  30. android:id="@+id/fragment_container"
  31. android:layout_width="match_parent"
  32. android:layout_height="match_parent"
  33. >
  34. </FrameLayout>
  35. <!-- 抽屉内容 -->
  36. <ListView
  37. android:id="@+id/drawer_content"
  38. android:layout_width="280dp"
  39. android:layout_height="match_parent"
  40. android:listSelector="#336699"
  41. android:divider="#B0C4DE"
  42. android:dividerHeight="1px"
  43. android:layout_gravity="start"
  44. android:background="#8470FF" />
  45. </android.support.v4.widget.DrawerLayout>
  1. import android.content.res.Configuration;
  2. import android.os.Bundle;
  3. import android.support.v4.app.Fragment;
  4. import android.support.v4.app.FragmentActivity;
  5. import android.support.v4.widget.DrawerLayout;
  6. import android.view.LayoutInflater;
  7. import android.view.Menu;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.view.ViewGroup;
  11. import android.widget.AdapterView;
  12. import android.widget.BaseAdapter;
  13. import android.widget.ListView;
  14. import android.widget.TextView;
  15. public class DrawerLayoutActivity extends FragmentActivity {
  16. private DrawerLayout mDrawerLayout;
  17. private ListView drawerContent;//抽屉内容
  18. @Override
  19. protected void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.drawer_layout);
  22. mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
  23. drawerContent = (ListView) findViewById(R.id.drawer_content);
  24. mDrawerLayout.setDrawerListener(new DemoDrawerListener());
  25. addHeader(drawerContent);//ListView Header头
  26. drawerContent.setAdapter(new MyAdapter());
  27. drawerContent.setOnItemClickListener(new DrawerItemClickListener());
  28. findViewById(R.id.slide).setOnClickListener(new OnClickListener() {
  29. public void onClick(View arg0) {
  30. mDrawerLayout.openDrawer(drawerContent);//打开抽屉内容
  31. }
  32. });
  33. //显示默认的HOME
  34. getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new HomeFragment()).commit();
  35. }
  36. private void addHeader(ListView mDrawer2) {
  37. View view = LayoutInflater.from(this).inflate(R.layout.list_header,null);
  38. mDrawer2.addHeaderView(view);
  39. }
  40. static String titles[] = { "主页", "公司", "附近", "设置" };
  41. class MyAdapter extends BaseAdapter {
  42. @Override
  43. public int getCount() {
  44. return titles.length;
  45. }
  46. @Override
  47. public Object getItem(int p) {
  48. return titles[p];
  49. }
  50. @Override
  51. public long getItemId(int arg0) {
  52. return 0;
  53. }
  54. @Override
  55. public View getView(int p, View contentView, ViewGroup arg2) {
  56. String title = titles[p];
  57. View v = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_list, null);
  58. TextView textView = (TextView) v.findViewById(R.id.text);
  59. textView.setText(title);
  60. return v;
  61. }
  62. }
  63. @Override
  64. public void onConfigurationChanged(Configuration newConfig) {
  65. super.onConfigurationChanged(newConfig);
  66. }
  67. private class DrawerItemClickListener implements
  68. ListView.OnItemClickListener {
  69. @Override
  70. public void onItemClick(AdapterView<?
  71. > parent, View view, int position,long id) {
  72. showFragmentById(position);
  73. mDrawerLayout.closeDrawer(drawerContent);
  74. }
  75. }
  76. //切换到相应的Fragment
  77. public void showFragmentById(int position) {
  78. Fragment f = null;
  79. switch (position) {
  80. case 1:
  81. f = new HomeFragment();
  82. break;
  83. case 2:
  84. f = new CompanyFragment();
  85. break;
  86. case 3:
  87. f = new NearFragment();
  88. break;
  89. case 4:
  90. f = new SettingFragment();
  91. break;
  92. default:
  93. break;
  94. }
  95. if (f == null) {
  96. return;
  97. }
  98. getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, f).commit();
  99. }
  100. //回调函数,打开或关闭时能够做一些事情
  101. private class DemoDrawerListener implements DrawerLayout.DrawerListener {
  102. @Override
  103. public void onDrawerOpened(View drawerView) { //打开时调用
  104. }
  105. @Override
  106. public void onDrawerClosed(View drawerView) { //关闭时调用
  107. }
  108. @Override
  109. public void onDrawerSlide(View drawerView, float slideOffset) {//滑动过程中
  110. }
  111. @Override
  112. public void onDrawerStateChanged(int newState) {
  113. }
  114. }
  115. @Override
  116. public boolean onCreateOptionsMenu(Menu menu) {
  117. return super.onCreateOptionsMenu(menu);
  118. }
  119. }

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

  1. public class HomeFragment extends Fragment {
  2. public HomeFragment() {
  3. }
  4. @Override
  5. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  6. Bundle savedInstanceState) {
  7. return inflater.inflate(R.layout.home_fg, container,false);
  8. }
  9. @Override
  10. public void onViewCreated(View view, Bundle savedInstanceState) {
  11. super.onViewCreated(view, savedInstanceState);
  12. TextView textView = (TextView) view.findViewById(R.id.text);
  13. textView.setText("Home");
  14. }
  15. }

home_fg.xml

  1. <?xml version="1.0" encoding="utf-8"?
  2. >
  3. <RelativeLayout 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/text"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:layout_margin="4dp"
  12. android:textSize="20sp"
  13. android:textColor="#9370DB"
  14. android:textStyle="bold"
  15. android:layout_centerInParent="true"
  16. />
  17. </RelativeLayout>

Android DrawerLayout 抽屉的更多相关文章

  1. Android笔记:DrawerLayout抽屉布局的使用

    DrawerLayout(抽屉布局),在各种app中经常出现,比如csdn.. 如下示,只要从屏幕侧边滑一下,或者点击左上角的图标,抽屉就会出来. DrawerLayout要点: 1.使用Drawer ...

  2. 浅谈DrawerLayout(抽屉效果)

    DrawerLayout是V4包下提供的一种左滑右滑抽屉布局效果. 实现效果如下: 因为是官方提供的,所以使用起来也相对的比较简单. DrawerLayout 提供 1.当界面弹出的时候,主要内容区会 ...

  3. Android - DrawerLayout

    Android DrawerLayout 的使用 Android L Android Studio 1.4 从主视图左侧能抽出一个导航栏,效果图:  点击后弹出新界面:  新界面也可以抽出左侧导航栏 ...

  4. android DrawerLayout 侧边栏实现

    现在实现侧边栏比较简单了,官方提供的DrawerLayout可以很方便实现. 主要实现方法是:用DrawerLayout 作为界面根控件.在DrawerLayout里面第一个View为当前界面主内容: ...

  5. android中抽屉布局DrawerLayout的使用

    这个抽屉布局类似于手机QQ的主界面,点击左上角头像,会从界面左侧弹出一个抽屉,展示一些内容. 首先是布局界面activity_main.xml: <?xml version="1.0& ...

  6. Android DrawerLayout Plus 增强版抽屉菜单

    DrawerLayout是官方提供的侧滑菜单,相比SliddingMenu,它更加轻量级.默认情况下,DrawerLayout可以设置左侧或者右侧滑出菜单.如下,   xml布局: <!-- & ...

  7. Android导航抽屉-Navigation Drawer

    Google今年七月份的时候更新了他们的Google+应用,采用了新的导航方式并抛弃了navigationdrawer.一时之间,又引发了一系列关于NavigationDrawer利弊的讨论,不过对于 ...

  8. DrawerLayout(抽屉效果)

    DrawerLayout是V4包下提供的一种左滑右滑抽屉布局效果. 实现效果如下: 因为是官方提供的,所以使用起来也相对的比较简单. DrawerLayout 提供 1.当界面弹出的时候,主要内容区会 ...

  9. Android DrawerLayout 高仿QQ5.2双向侧滑菜单

    1.概述 之前写了一个Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭 ,恰逢QQ5.2又加了一个右侧菜单,刚好看了下DrawerLayout,一方面官方的东西,我都比较感兴趣:另一方面 ...

随机推荐

  1. [C#基础] 类

    类成员 字段和方法是最重要的类成员类型,字段是数据成员,方法是函数成员 字段 字段是隶属于类的变量 它可以是任何类型,无论是预定义类型还是用户定义类型 和所有变量一样,字段用来保存数据 它们可以被写入 ...

  2. Delphi默认窗体随想

    Delphi中新建一个Form或者Frame时,它的字体都是西文习惯,这样就有可能造成在其他机器上由于字体的原因,窗体十分不美观.怎样才能为Delphi设置一个默认窗体,让它的字体Font符合中国习惯 ...

  3. java OOP及相关基础知识汇总(转)

    OOP 对象有三个要素 behavior 接口是怎样的,有什么方法/field可以用? state 调用方法的时候,对象会有什么反应? 只有通过调用方法才能改变一个对象的state identity ...

  4. IOT表优缺点

    <pre name="code" class="html">IOT表是将所有东西都塞到叶块中,表就是索引,可以避免回表 首先,对于IOT而言,只有索 ...

  5. expect实现ssh自动登录

    expect实现ssh自动登录   #!/usr/local/bin/expect set PASSWD [lindex $argv 1] set IP [lindex $argv 0] set CM ...

  6. RotateDisp – 一键旋转显示画面 - 小众软件

    RotateDisp – 一键旋转显示画面 - 小众软件 RotateDisp – 一键旋转显示画面

  7. linux下自助获取帮助

    几乎所有命令都可以用 -h 或者--help参数 获取命令的使用方法帮助 man ls   也可以获取ls命令的详细帮助信息 man -k XXX  可以查看包含关键字XXX的文档 还有一个更详细的命 ...

  8. Struts 2.x仍然明显落后于时代。 Struts 2.x这一类老牌Web MVC开发框架仅能用于开发瘦客户端应用,无法用来开发对于交互体验要求更高的应用。

    后来我在工作中陆续使用过Struts 1.x和Struts 2.x.我曾经把一个开源的基于Struts 1.x的自助式广告联盟应用移植到Spring MVC,还基于Struts 2.x做过网站开发.S ...

  9. 日志收集之kafka

    日志收集之kafka http://www.jianshu.com/p/f78b773ddde5 一.介绍 Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1 ...

  10. Android bluetooth介绍(四): a2dp connect流程分析

    关键词:蓝牙blueZ  A2DP.SINK.sink_connect.sink_disconnect.sink_suspend.sink_resume.sink_is_connected.sink_ ...