在做谷歌电子市场的时候用的是DrawerLayout实现的抽屉效果,在新闻客户端的时候用的是开源框架SlidingMenu来实现的,总的来说,各有个的优点,侧滑(开源框架)实现的效果更好,但是DrawerLayout直接写布局文件就好了,不过我还是比较喜欢用开源框架的这个![安静](https://box.kancloud.cn/2016-01-25_56a5a36706237.gif)
。下面分别来说说如何实现:
**一、SlidingMenu**
首先要引入SlidingMenu的库文件的类库,不能直接导入jar包。然后 Activity继承SlidingFragmentActivity。其次,将onCreate方法改为public。
在主界面中添加如下代码:
~~~
//调用api
setBehindContentView(R.layout.left_menu);// 设置侧边栏布局
SlidingMenu slidingMenu = getSlidingMenu();// 获取侧边栏对象
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);// 设置全屏触摸
slidingMenu.setSecondaryMenu(R.layout.right_menu);// 设置右侧边栏
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);// 设置展现模式
slidingMenu.setBehindOffset(100);// 设置预留屏幕的宽度
~~~
在BasePager.java中添加如下代码。
~~~
/**
* 切换SlidingMenu的状态
*
* @param b
*/
protected void toggleSlidingMenu() {
MainActivity mainUi = (MainActivity) mActivity;
SlidingMenu slidingMenu = mainUi.getSlidingMenu();
slidingMenu.toggle();// 切换状态, 显示时隐藏, 隐藏时显示
}
/**
* 初始化数据
*/
public void initData() {
}
/**
* 设置侧边栏开启或关闭
*
* @param enable
*/
public void setSlidingMenuEnable(boolean enable) {
MainActivity mainUi = (MainActivity) mActivity;
SlidingMenu slidingMenu = mainUi.getSlidingMenu();
if (enable) {
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
} else {
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);
}
}
~~~
每个子界面都可以用到如下的代码:
~~~
public class SettingPager extends BasePager {
public SettingPager(Activity activity) {
super(activity);
}
@Override
public void initData() {
//System.out.println("初始化设置数据....");
tvTitle.setText("设置");
btnMenu.setVisibility(View.GONE);// 隐藏菜单按钮
setSlidingMenuEnable(false);// 关闭侧边栏
TextView text = new TextView(mActivity);
text.setText("设置");
text.setTextColor(Color.RED);
text.setTextSize(25);
text.setGravity(Gravity.CENTER);
// 向FrameLayout中动态添加布局
flContent.addView(text);
}
}
~~~
![](https://box.kancloud.cn/2016-03-14_56e65d6c204ac.jpg)
**二、DrawerLayout**
直接在布局文件中这样写:
~~~
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:id="@+id/dl">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
/>
<FrameLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_tab"
android:layout_gravity="left">
</FrameLayout>
</android.support.v4.widget.DrawerLayout>
~~~
然后再主页面中添加:
控制抽屉的开关, 显示在actionBar 上面
~~~
public class MainActivity extends BaseActivity implements
OnQueryTextListener {
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle drawerToggle;
private ViewPager mViewPager;
private PagerTabStrip pager_tab_strip;
private String[] tab_names; // 标签的名字
@Override
protected void initActionBar() {
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
/*
* 1)显示Navigation Drawer的 Activity 对象
2) DrawerLayout 对象
3)一个用来指示Navigation Drawer的 drawable资源
4)一个用来描述打开Navigation Drawer的文本 (用于支持可访问性)。
5)一个用来描述关闭Navigation Drawer的文本(用于支持可访问性).
*/
drawerToggle = new ActionBarDrawerToggle(this,
mDrawerLayout, R.drawable.ic_drawer_am, R.string.open_drawer,
R.string.close_drawer){
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
Toast.makeText(getApplicationContext(), "抽屉关闭了", 0).show();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
Toast.makeText(getApplicationContext(), "抽屉打开了", 0).show();
}
};
mDrawerLayout.setDrawerListener(drawerToggle);
// 让开关和actionbar建立关系
drawerToggle.syncState();
}
}
~~~
![](https://box.kancloud.cn/2016-03-14_56e65d6c377ae.jpg)
- 前言
- 内存溢出的解决方案
- 安卓消息推送解决方案
- 语言识别和聊天机器人的实现
- 抽屉效果的实现(DrawerLayout和SlidingMenu的对比)
- 植物大战僵尸经典开发步骤
- 屏幕适配全攻略
- 安卓图像处理入门教程
- android开发常用工具箱
- java基础知识总结
- 剖析软件外包项目
- java基础知识——网络编程、IO流
- 安卓性能优化手册
- 电商活动中刮刮卡的实现
- Android系统的安全设计与架构
- AsnycTask的内部的实现机制
- Android应用UI设计流程
- 数据结构与算法,每日一道
- html5全解析
- 深入解读XML解析
- 新闻客户端案例开发
- 细说Http协议
- win10+ubuntu双系统安装方案
- 随机验证码实现案例
- 动态数组的实现案例
- 猜拳游戏案例
- 商业级项目——基金客户端的架构设计与开发(上)