效果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hkamo=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hkamo=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

DrawerLayout来自support.v4包,所以不用考虑兼容性问题。其次,这样的布局类似风靡一时的側滑菜单,可是比側滑菜单轻巧很多。
以下介绍这样的布局的使用方式。
1.在你的项目中导入support.v4包。
2.编辑一个布局,根节点为android.support.v4.widget.DrawerLayout,此节点下仅仅同意有两个子节点,第一个为将来主页面的内容,第二个节点即为"抽屉"内容,一般是一个ListView。比方:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈"
android:textColor="#000"
android:textSize="20sp" />
<Button
android:id="@+id/but_open"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="开启抽屉" />
</LinearLayout>
<!-- 一定要加 layout_gravity="start" -->
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#111"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>

3.编写代码,监听相关事件:

package com.example.drawerlayoutdemo1;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
public class MainActivity extends Activity
{
protected static final String TAG = "MainActivity";
private DrawerLayout mDrawerLayout = null;
private ListView lv = null;
private Button but_open = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
lv = (ListView) findViewById(R.id.left_drawer);
but_open = (Button) findViewById(R.id.but_open);
but_open.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
mDrawerLayout.openDrawer(Gravity.LEFT);
}
});
lv.setAdapter(new ArrayAdapter<String>(this,R.layout.test,R.id.tv_item,new String[]{"条目1","条目2","条目3"}));
mDrawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener()
{
@Override
public void onDrawerClosed(View drawerView)
{
Log.i(TAG,"抽屉关闭了...");
}
@Override
public void onDrawerOpened(View drawerView)
{
Log.i(TAG,"抽屉打开了...");
}
@Override
public void onDrawerSlide(View drawerView, float slideOffset)
{
Log.i(TAG,"抽屉在滑动...");
}
@Override
public void onDrawerStateChanged(int newState)
{
switch (newState)
{
case DrawerLayout.STATE_DRAGGING:
Log.i(TAG,"拖动状态");
break;
case DrawerLayout.STATE_IDLE:
Log.i(TAG,"精巧状态");
break;
case DrawerLayout.STATE_SETTLING:
Log.i(TAG,"设置状态");
break;
default:
break;
}
}
});
lv.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<? > parent, View view,
int position, long id)
{
switch (position)
{
case 0:
Log.i(TAG,"条目1被点击");
break;
case 1:
Log.i(TAG,"条目2被点击");
break;
case 2:
Log.i(TAG,"条目3被点击");
break;
}
} });
}
}




最新文章

  1. wpf 逻辑树与可视化树
  2. 新浪微博UWP版-实现‘分享功能’的艰难路
  3. 输入事件驱动---evdev_handler的大致实现流程(修整版)
  4. C# rename方法重命名文件
  5. css+div
  6. Web离线存储的几种方式
  7. eclipse使用
  8. TypeC一个微软开发的超简单.NET依赖注入/IoC容器
  9. struts2 if正确标签示例
  10. [转] 《高性能HTML5》读后整理的Web性能优化内容
  11. MFC的初始化过程和消息映射技术
  12. PAT (Advanced Level) 1099. Build A Binary Search Tree (30)
  13. VAO VBO IBO大乱炖
  14. 错误号码2003 Can&#39;t connect to MySQL server &#39;localhost&#39; (0)
  15. 解决 Can&#39;t Connect to MySQL Server on IPAddress (10061) 的问题
  16. vue.js之组件篇
  17. npm安装教程
  18. 在IDEA中使用MyBatis Generator自动生成代码
  19. ASP.NET Web API 启用跨域访问
  20. GC Ergonomics间接引发的锁等待超时问题排查分析

热门文章

  1. 关于在Qt里让程序休眠一段时间的方法总结
  2. Eclipse 下载 开源项目 maven依赖丢失和 Deployment Assembly 丢失
  3. Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/config/spring/applicationContext.xml]
  4. Microsoft Windows Server DHCP
  5. CF716E Digit Tree 点分治
  6. django实现github第三方本地登录
  7. webpack 之 缓存处理
  8. (十七)python 3 函数递归
  9. 电源模块PCB设计
  10. Oracle中exit,return,continue