AndroidUI 侧滑菜单 DrawerLayout的使用
直接上代码:
activity_main.xml:
<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"> <!-- 主视图 -->
<FrameLayout android:id="@+id/content_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout> <!-- 左侧菜单 -->
<ListView android:id="@+id/letf_menu"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#ffffcc"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"> </ListView> </android.support.v4.widget.DrawerLayout>
MainActivity:
public class MainActivity extends Activity implements OnItemClickListener {
private DrawerLayout mDrawerLayout;
private ListView mListView;
private List<String> menuList;
private ArrayAdapter<String> adapter;
private ActionBarDrawerToggle toggle;
private String mTitle;
//1.创建DrawerLayout并填充内容
//2.实现侧滑菜单的点击事件,点击后切换内容
//3.在导航条右侧显示搜索按钮,并实现打开网页功能
//4.实现当打开侧滑菜单后头部title的改变,并且隐藏其他menu;关闭侧滑菜单后显示Menu 变更title
//5.实现点击左上角导航按钮打开侧滑菜单功能
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取当前的title
mTitle=(String) getTitle();
//----------------1.--------------
// 为左侧抽屉菜单 添加内容
mDrawerLayout=(DrawerLayout) findViewById(R.id.drawer_layout);
mListView=(ListView) findViewById(R.id.letf_menu);
menuList=new ArrayList<String>();
for(int i=0;i<5;i++){
menuList.add("抽屉菜单0"+i);
}
adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, menuList);
mListView.setAdapter(adapter);
//----------------2.--------------
//当点击左侧菜单 时,添加监听事件
mListView.setOnItemClickListener(this);
//----------------4.--------------
//为 DrawerLayout 设置 ActionBarDrawerToggle 监听事件,来完成监听抽屉状态变化的功能。
//当侧拉菜单打开以后,显示title为请选择; 关闭以后显示原title
toggle=new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer
, R.string.open_drawer,R.string.close_drawer){
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
getActionBar().setTitle("请选择");
//重新绘制头部的Menu,当调用invalidateOptionsMenu时,系统会自动调用onPrepareOptionsMenu方法
invalidateOptionsMenu();
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
getActionBar().setTitle(mTitle);
//重新绘制头部的Menu
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(toggle);
//----------------5.--------------
//开启ActionBar 上面的icon的功能
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
}
//----------------4.--------------
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
//获取侧拉菜单的打开状态
Boolean isOpen=mDrawerLayout.isDrawerOpen(mListView);
//当侧拉菜单 打开时,隐藏搜索按钮,当侧拉菜单关闭时,显示搜索按钮
menu.findItem(R.id.action_search).setVisible(!isOpen);
return super.onPrepareOptionsMenu(menu);
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
//----------------2.--------------
// 动态插入一个Fragment到FrameLayout中
Fragment fragment=new ContentFragment();
Bundle args=new Bundle();
args.putString("text", menuList.get(position));
fragment.setArguments(args);
//替换掉当前的Fragment内容
FragmentManager manager=getFragmentManager();
manager.beginTransaction().replace(R.id.content_layout, fragment).commit();
//关闭左侧菜单
mDrawerLayout.closeDrawer(mListView);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//----------------5.--------------
//将ActionBar与Drawer结合起来,点击左上角的菜单时,打开侧拉菜单
if(toggle.onOptionsItemSelected(item)){
return true;
}
//----------------3.--------------
//当点击搜索按钮的时候打开一个网站
switch (item.getItemId()) {
case R.id.action_search:
Intent intent=new Intent();
intent.setAction("android.intent.action.VIEW");
Uri uri=Uri.parse("http://www.fitnes.cn");
intent.setData(uri);
startActivity(intent);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
//----------------5.--------------
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
//调用ActionBarDrawerToggle.syncState()
//在Activity的onPostCreate()中;指示,ActionBarDrawerToggle与DrawerLayout的状态同步,
//并将ActionBarDrawerToggle中的drawer图标,设置为ActionBar的Home-Button的icon
toggle.syncState();
}
//----------------5.--------------
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
toggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
ContentFragment:
public class ContentFragment extends Fragment {
//----------------2.--------------
private TextView tv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.content_fragment,container, false);
tv=(TextView) view.findViewById(R.id.txtView);
String text=getArguments().getString("text");
tv.setText(text);
return view;
}
}
content_fragment.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- 2. -->
<TextView android:id="@+id/txtView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
menu/main.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 3. -->
<item android:id="@+id/action_search"
android:showAsAction="ifRoom|withText"
android:title="@string/webSerach"
android:icon="@drawable/action_search"/>
</menu>
ActionBarDrawerToggle 和DrawerLayout资料
http://www.tuicool.com/articles/NVzu6b6
http://blog.csdn.net/jjwwmlp456/article/details/38682637
效果:
AndroidUI 侧滑菜单 DrawerLayout的使用的更多相关文章
- android 应用架构随笔五(ActionBar与侧滑菜单DrawerLayout)
ActionBar(V7)的添加非常简单,只需要在AndroidManifest.xml中指定Application或Activity的theme是Theme.Holo或其子类就可以了,在Androi ...
- android L 新控件侧滑菜单DrawerLayout 使用教程
介绍 drawerLayout是Support Library包中实现了侧滑菜单效果的控件,可以说drawerLayout是因为第三方控件如MenuDrawer等的出现之后,google借鉴而出现的产 ...
- 【转】android官方侧滑菜单DrawerLayout详解
原文网址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0925/1713.html drawerLayout是Support ...
- android官方侧滑菜单DrawerLayout详解
drawerLayout是Support Library包中实现了侧滑菜单效果的控件,可以说drawerLayout是因为第三方控件如MenuDrawer等的出现之后,google借鉴而出现的产物.d ...
- Android 高大上的侧滑菜单DrawerLayout,解决了不能全屏滑动的问题
DrawerLayout预览 DrawerLayout主要功能就是 实现侧滑菜单效果的功能,并且可以通过增加一些设置来实现高大上的效果,那么就请看动态图: 注意左上角那个图标,有木有很好玩,哈哈. ...
- Android之侧滑菜单DrawerLayout的使用
在android support.v4 中有一个抽屉视图控件DrawerLayout.使用这个控件,可以生成通过在屏幕上水平滑动打开或者关闭菜单,能给用户一个不错的体验效果. DrawerLayout ...
- 第三方侧滑菜单SlidingMenu在android studio中的使用
南尘:每天进步一点点! 前面讲了官方的侧滑菜单DrawerLayout的使用,其实早在官方没有推出这个之前,就有很多第三方的jar包如SlidingMenu等,感谢开源的力量. SlidingMenu ...
- android侧滑菜单笔记
一.SlidingPaneLayout v4包下的控件,使用简单,功能简洁.官方文档明确说明该控件只能左侧滑动.使用如下: <android.support.v4.widget.SlidingP ...
- DrawerLayoutDemo【侧边栏(侧滑菜单)简单实现】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 简单实现侧边栏(侧滑菜单)效果: 点击触发打开左侧侧边栏,手势滑动关闭左侧侧边栏: 手势滑动打开右侧侧边栏,手势滑动关闭右侧侧边栏: ...
随机推荐
- Oracle左连接、右连接、全外连接
Oracle 外连接 (1)左外连接 (左边的表不加限制)(2)右外连接(右边的表不加限制)(3)全外连接(左右两表都不加限制) 外连接(Outer Join) outer join则会返回每个满足 ...
- COB(Chip On Board)的製程簡單介紹
前面提及 COB 的生產與 IC 的封裝製程幾乎是一致的,除了把 leadframe 改成了 PCB,把封膠由 molding 改成 dispensing,少了 triming & marki ...
- python内置函数(2)-递归与迭代
这篇文章简单介绍了迭代和递归的概念.两者的区别 什么是迭代: 迭代是重复反馈过程的活动,其目的通常是为了接近并达到所需的目标或结果.每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来 ...
- C# 基础知识 (一).概念与思想篇
在C#中有一些我自己认为比较独特的知识点,这些知识点是我经常使用的知识,但对它们的了解还是比较少的,所以通过查找资料学习,总结了这些独特的知识点并简单叙述,第一篇主要是一些概念和思想方面的知识.(后面 ...
- 项目总结——SqlParameter的参数设置长度(size属性)
看到很多朋友在实例化SqlParameter时,通常都没有指定参数的长度就直接给参数赋值了.就像下面的写法: new SqlParameter("@address", SqlDbT ...
- iOS开发-使用Storyboard进行界面跳转及传值
前言:苹果官方是推荐我们将所有的UI都使用Storyboard去搭建,Storyboard也是一个很成熟的工具了.使用Storyboard 去搭建所有界面,我们可以很迅捷地搭建出复杂的界面,也就是说能 ...
- RAID技术
RAID:其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵.容量巨大的硬盘.所以称为廉价磁盘冗余数组 RAID级别: RAID 0亦称为带区集.它是将多个 ...
- 【二分+最大团】【HDU3585】【maximum shortest distance】
题目大意 在N个点钟 选出K个点 使得这K个点间的最小距离最大 二分距离,然后如果两点间距离小于它的边当做不存在,求出最大团,如果最大团>=K,向上缩小区间 < K , 向下缩小区间 ...
- 搭建MyBatis框架
一.开发环境 1.JDK 1.6.0_22 2.MyEclipse 10.7.1 3.Oracle_10g_10.2.0.4 注:各软件版本不是必须的,正常任意版本都行,文件较大就不附上下载地址了,推 ...
- jQuery基础---Ajax基础教程(二)
jQuery基础---Ajax进阶 内容提纲: 1.加载请求 2.错误处理 3.请求全局事件 4.JSON 和 JSONP 5.jqXHR 对象 发文不易,转载请注明出处! 在 Ajax 基础一篇中, ...