java 抽屉效果,抽屉效果的实现(DrawerLayout和SlidingMenu的对比)

在做谷歌电子市场的时候用的是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**

直接在布局文件中这样写:

~~~

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity"

android:id="@+id/dl">

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_centerHorizontal="true"

android:layout_centerVertical="true"

/>

android:layout_height="match_parent"

android:background="@drawable/bg_tab"

android:layout_gravity="left">

~~~

然后再主页面中添加:

控制抽屉的开关, 显示在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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值