SlidingMenu控件的使用方法

Stella981
• 阅读 647

slidingmenu是一个非常流行的开源组件,可以实现侧滑菜单的效果.

下面来讲解下怎么使用,集成的方式有3种方式.

1. 通过编程的方式把Activity包装进SlidingMenu里,如下所示:                           

menu = new SlidingMenu(this);
// 设置SlidingMenu各种属性                            
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
menu.setShadowWidthRes(R.dimen.shadow_width);             
menu.setShadowDrawable(R.drawable.shadow);                
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);      
menu.setFadeDegree(0.35f);

//把Activity附着到SlidingMenu                               
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);

//设置侧边的菜单的layout
menu.setMenu(R.layout.menu_frame);

附着到SlidingMenu时,可以选择以下两种方式之一
SlidingMenu.SLIDING_WINDOW, 表示SlidingMenu(也即底层视图Behind View)滑出时,内容Activity(也即上层视图Above View)的Title或ActionBar会滑向一侧. 或者也可以这么理解:当SlidingMenu滑出时,连带它的title/ActionBar也会一起滑出,把Activity的title/ActionBar会挤向一边.这种方式是最常见的方式.
SlidingMenu.SLIDING_CONTENT, 表示当SlidingMenu滑出时,内容Activity的Title或ActionBar不会动,或者也可以说SlidingMenu根本就没有title/ActionBar.          

这种集成的方式可以参考Example示例里的AttachExample.java

2. 通过我们的Activity继承SlidingActivity,直接把SlidingMenu嵌进来.
在我们的onCreate方法里,除了通过调用setContentView,还需要调用setBehindContentView,它将设置侧滑出的Menu视图的Layout,然后就可以通过父类的getSlidingMenu得到SlidingMenu, 然后自定义或设置它的属性.如下所示:

public class BaseActivity extends SlidingFragmentActivity{
//...
public void onCreate(Bundle savedInstanceState) {
//....
// customize the SlidingMenu                             
SlidingMenu sm = getSlidingMenu(); //通过父类的getSlidingMenu得到SlidingMenu                      
sm.setShadowWidthRes(R.dimen.shadow_width);              
sm.setShadowDrawable(R.drawable.shadow);                 
sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);       
sm.setFadeDegree(0.35f);                                 
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);  
//...
}

这种集成的方式可以参考Example示例里的BaseActivity.java

3. 我们可以把SlidingMenu看作是一种View,直接在通过XML Layout来定义它(或用纯JAVA代码来定义也行), 然后可以把它放在它你想要放的地方.
如下所示,通过XML定义SlidingMenu:

<com.jeremyfeinstein.slidingmenu.lib.SlidingMenu
    xmlns:sliding="http://schemas.android.com/apk/res-auto"
    android:id="@+id/slidingmenulayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    sliding:viewAbove="@layout/YOUR_ABOVE_VIEW" <!--这里放上层的内容视图-->
    sliding:viewBehind="@layout/YOUR_BEHIND_BEHIND" <!--这里放底下的Menu视图-->
    sliding:touchModeAbove="margin|fullscreen" <!--只在边缘滑动时调出菜单,还是全屏滑动时都可以调出菜单-->
    sliding:behindOffset="@dimen/YOUR_OFFSET"
    sliding:behindWidth="@dimen/YOUR_WIDTH"
    sliding:behindScrollScale="@dimen/YOUR_SCALE"
    sliding:shadowDrawable="@drawable/YOUR_SHADOW"
    sliding:shadowWidth="@dimen/YOUR_SHADOW_WIDTH"
    sliding:fadeEnabled="true|false"
    sliding:fadeDegree="float"
    sliding:selectorEnabled="true|false"
    sliding:selectorDrawable="@drawable/YOUR_SELECTOR"/>

有空所有属性的详细说明请参考:https://github.com/jfeinstein10/slidingmenu

SlidingMenu如果要使用ActionBarSherlock提供的Actionbar功能, 只要修改lib包中各SlidingActivity们extend Sherlock___Activity而不是___Activity.比如:public class SlidingFragmentActivity extends SherlockFragmentActivity implements SlidingActivityBase.

附带的DEMO源码分析:
最好先下载安装DEMO APP,然后体验下效果,再来读源码效果会很好.

程序入口Activity是ExampleListActivity.这个类继承了SherlockPreferenceActivity,并且使用偏好设置的

方式组织程序的功能:
this.addPreferencesFromResource(R.xml.main);

重写onPreferenceTreeClick(PreferenceScreen screen, Preference pref)方法,当点击某项功能时,根据偏

好的title得到要启动的Activity的类,然后把它包装在Intent中,最后startActivity启动这个Activity.

Class<?> cls = null;
        String title = pref.getTitle().toString();
        if (title.equals(getString(R.string.properties))) {
            cls = PropertiesActivity.class;    
        } else if (title.equals(getString(R.string.attach))) {
            cls = AttachExample.class;

        Intent intent = new Intent(this, cls);
        startActivity(intent);
        return true;

AttachExample演示了通过代码menu = new SlidingMenu(this)的最基本的方式使用SlidingMenu的方法.

BaseActivity是多个例子Activity的基类,定义了基本的Behind View及设置了SlidingMenu的一些属性,但有很

重要的一点的它没有定义Above View,因为Above View表示的是内容界面,是留给子类来实现的,子类有这些:
FragmentChangeActivity
PropertiesActivity
LeftAndRightActivity,演示左右两边都可滑出菜单功能
SlidingContent,演示只滑动内容界面功能//setSlidingActionBarEnabled(false);
SlidingTitleBar,演示可滑动ActionBar标题功能//setSlidingActionBarEnabled(true);
ViewPagerActivity,演示结合ViewPager的使用方法,这在新闻类应用中非常常见,与网易新闻类似.

com.jeremyfeinstein.slidingmenu.example.anim这个包演示了滑出菜单时动画效果的设置,可安装DEMO APP

体验下效果.

以上就是SlidingMenu最常见的功能与方法,细枝末节的地方可直接参考源码.

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这