SlidingMenu的配置与基本使用方法Demo

来源:互联网 发布:域名访问量查询 编辑:程序博客网 时间:2024/06/06 07:47

这篇文章主要写的是slidingmenu的配置方法,以及配置成功后成功使用的一个小demo

该内容主要是在我的第一篇文章 ViewPager+Fragment 仅加载当前页面的demo 的基础之上进行了修改,加了一个slidingmenu,通过slidingmenu上的list列表,点击哪个选项,就滑动到哪个页面。下面是实现后的效果图:



一.SlidingMenu的环境配置

我们需要从github上下载两个开源代码库,一个是slidingMenu,一个是ActionBarSherlock(因为slidingMenu需要用到这个库中的内容)

下面附上下载地址:

actionBarSherlock: https://github.com/JakeWharton/ActionBarSherlock

slidingMenu: https://github.com/jfeinstein10/slidingmenu

下载之后,解压,对于actionBarSherlock,我们向eclipse里导入它的工程actionBarSherlock

而slidingMenu,我们导入library就可以了。(要学习demo之类的请另外导入别的内容)

导入工程以后,我们首先需要将actionBarSherlock的工程当做引用库导入到library中

1.actionBarSherlock的islibrary打勾:



2.library中引入该actionBarSherlock工程,并且也将isLibrary打勾



3.由于这两个库中都有v4包,所以我们将library的v4包删除,以防重复定义

4.在SlidingMenu的源码中修改一些内容,以防后面报错,SlidingActivity.java中,将该类继承的类改为:SherlockActivity


SlidingFragmentActivity.java中,将该类的继承类改为:SherlockFragmentActivity



完成上面的步骤后,接下来我们就可以新建一个android工程了,我这里直接使用上篇文章的工程PagerTest

在新建的工程中,我们需要将library库导入到该工程中,如下:



如此这般,该项目就可以使用SlidingMenu框架的功能了。

下面就是之前我说过的demo:


在上一个项目的基础上,我将MainActivity继承了SlidingFragmentActivity

并且为了实现之前说的效果,定义了一个layout作为菜单文件的layout,一个layout作为菜单文件的内容(之后Fragment的layout)

分别是:

behindview.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"    android:id="@+id/behindView" />

list.xml:

<?xml version="1.0" encoding="utf-8"?><ListView xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@android:id/list"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingLeft="10dp"    android:paddingRight="10dp" />

用来显示菜单界面的MyListFragment.java,我们定义了一个listView,并且监听了他的点击事件,当某一项被点击时,ViewPager就跳到相应的界面,处理点击事件是在Activity处理的,稍后在述:

public class MyListFragment extends ListFragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {List<String> data = new ArrayList<String>();data.add("第一个");data.add("第二个");data.add("第三个");data.add("第四个");data.add("第五个");setListAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, data));return super.onCreateView(inflater, container, savedInstanceState);}@Overridepublic void onListItemClick(ListView l, View v, int position, long id) {if (getActivity() instanceof MainActivity) {MainActivity activity = (MainActivity) getActivity();activity.processListClick((int) id);}super.onListItemClick(l, v, position, id);}
上面当某个list点击之后,会把id传到activity中,进行相关处理,下面我们来看MainActivity.java的内容

onCreate方法:

@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setBehindContentView(R.layout.behindview);initContentView();setupSlidingMenu();}
其中,setBehindContentView()就是slidingMenu的方法,用于设置slideMenu 的View

initContentView()里是上篇文章对ViewPager的配置,这里仅贴出代码:

private void initContentView() {pager = (ViewPager) findViewById(R.id.pager);fgs = new TestFragment[5];for (int i = 0; i < 5; i++) {fgs[i] = new TestFragment();Bundle bundle = new Bundle();bundle.putInt("id", i);fgs[i].setArguments(bundle);}FragmentManager manager = getSupportFragmentManager();adapter = new FragmentPagerAdapter(manager) {@Overridepublic int getCount() {return fgs.length;}@Overridepublic Fragment getItem(int arg0) {return fgs[arg0];}};pager.setAdapter(adapter);pager.setCurrentItem(0);}

下面就是对SlideMenu进行设置:

private void setupSlidingMenu() {getSlidingMenu().setMode(SlidingMenu.LEFT);getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);getSlidingMenu().setBehindOffset(100);getSlidingMenu().setFadeDegree(0.35f);getFragmentManager().beginTransaction().replace(R.id.behindView, new MyListFragment()).commit();getActionBar().setDisplayHomeAsUpEnabled(true);}
我们可以直接通过getSlidingMenu来得到当前Activity的SlidingMenu,但是得设置过,否则会报空指针

接下来就是对该SlidingMenu的各项属性进行设置,关于其属性的设置,请看github上的属性说明,不过是英文。。。

这里仅对这里面有的属性进行说明:

setMode是设置从那边弹出,有LEFT,RIGHT,LEFTRIGHT可选

setTouchModeAbove  我理解是触摸范围,TOUCHMODE_MARGIN代表大约左半个(或又半个)屏幕的范围内滑动时可以弹出SlidngMenu,TOUCHMODE_FULLSCREEN是全屏范围滑动有效(注意冲突。。。)

setBehindOffset指的是当滑动菜单弹出时,内容界面显示的大小(单位像素)

setFadeDegree指的是渐变的系数,从0.0F,到1.0F范围内,系数越大,渐变越明显

后面就是设置menu的实体View,还有左上角的点击按钮,点击之后就可以弹出SlidingMenu


下面就是左上角点击按钮的点击事件:

@Overridepublic boolean onOptionsItemSelected(MenuItem item) {if (item.getItemId() == android.R.id.home)getSlidingMenu().toggle();return super.onOptionsItemSelected(item);}
toggle()帮助我们省去了一些判断,当前SlidingMenu处于显示状态时,就隐藏,隐藏状态时,就弹出

下面是处理Menu中每个listItem的点击事件,主要工作就是,翻到相应页,隐藏SlidingMenu:

public void processListClick(int id) {pager.setCurrentItem(id);getSlidingMenu().showContent();}


基本就是这样,如有不足,尽请指正,谢谢。

附上demo下载地址:http://download.csdn.net/detail/tc598100922/7341297









0 0
原创粉丝点击