博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抽屉效果的实现(DrawerLayout和SlidingMenu的对比)
阅读量:5975 次
发布时间:2019-06-20

本文共 3199 字,大约阅读时间需要 10 分钟。

        在做谷歌电子市场的时候用的是DrawerLayout实现的抽屉效果,在新闻客户端的时候用的是开源框架SlidingMenu来实现的,总的来说,各有个的优点,侧滑(开源框架)实现的效果更好,但是DrawerLayout直接写布局文件就好了,不过我还是比较喜欢用开源框架的这个安静。下面分别来说说如何实现:

1、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);	}}

二、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://www.cnblogs.com/xiaowangba/p/6314905.html

你可能感兴趣的文章
C++的iostream标准库介绍+使用详解(转)
查看>>
批量修改文件后缀
查看>>
#ifndef#define#endif的用法-b
查看>>
linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈【转】...
查看>>
如何改变Myeclipse编辑区背景色
查看>>
mysql 5.6到percona 5.6小版本升级
查看>>
贴片钽电容封装、尺寸
查看>>
主动模式FTP与被动模式FTP该如何选择
查看>>
Linux makefile 教程 非常详细,且易懂
查看>>
关于C#泛型列表List<T>的基本用法总结
查看>>
FineUI(开源版)v6.0中FState服务器端验证的实现原理
查看>>
pt-online-schema-change中update触发器的bug
查看>>
PHP curl报错“Problem (2) in the Chunked-Encoded data”解决方案
查看>>
Pointer arithmetic for void pointer in C
查看>>
【java】 linux下利用nohup后台运行jar文件包程序
查看>>
Java Lambda表达式初探
查看>>
前端进阶之路:初涉Less
查看>>
Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复
查看>>
【CLR via C#】CSC将源代码编译成托管模块
查看>>
Python协程:从yield/send到async/await
查看>>