这篇文章主要写的是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 {
@Override
public 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);
}
@Override
public 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方法:
@Override
public 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) {
@Override
public int getCount() {
return fgs.length;
}
@Override
public 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
下面就是左上角点击按钮的点击事件:
@Override
public 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.youkuaiyun.com/detail/tc598100922/7341297