SlidingMenu侧拉菜单,是一种新的设置界面结果。在主界面左滑或者右滑呈现设置界面,能便利的进行各类操纵,现在有大量的应用都在使用这一开源组件。
在实战开发中使用SlidingMenu之前必须添加两个资源包:SlidingMenu和ActionBarSherlock,不然会报资料找不到错误。
github地址:https://github.com/jfeinstein10/SlidingMenu
ActionBarSherlock 地址:https://github.com/JakeWharton/ActionBarSherlock
配置好之后,必须将SlidingMenu和ActionBarSherlock中的V4包必须与新项目的V4包版本一致,不然V4包会报错。最好将新项目中的V4包复制,替换掉到SlidingMenu和ActionBarSherlock中V4包。这样就可以在新项目中调用SlidingMenu开源类了。
SlidingMenu 常用属性:
menu.setMode(SlidingMenu.LEFT);//设置左滑菜单
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的屏幕局限,该设置为全屏区域都可以滑动
menu.setShadowDrawable(R.drawable.shadow);//设置暗影
menu.setShadowWidthRes(R.dimen.shadow_width);//设置暗影的宽度
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度
menu.setBehindWidth(400);//设置SlidingMenu菜单的宽度
menu.setFadeDegree(0.35f);//SlidingMenu滑动时的渐变程度
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);//使SlidingMenu附加在Activity上
menu.setMenu(R.layout.menu_layout);//设置menu的布局文件
menu.toggle();//动态断定主动封闭或开启SlidingMenu
menu.showMenu();//显示SlidingMenu
menu.showContent();//显示内容
menu.setOnOpenListener(onOpenListener);//slidingmenu打开关于封闭menu有两个,简单的来说,对于menu close事务,一个是when,一个是after
menu.OnClosedListener(OnClosedListener);//slidingmenu封闭时事务
menu.OnClosedListener(OnClosedListener);//slidingmenu封闭后事务
menu.setSlidingEnabled(false);//默认是true,激活slidingmenu, false 不激活slidingmenu,所设置的slidingmenu不起作用。
以下介绍一下,本人在面试时候,利用slidingmenu做的一个小项目。大概介绍以下,中间有3张图片,存放到一个viewPager里面,可以左右滑动。左,右两边都有一个隐藏的侧拉菜单。
=============================================MainActivity 的代码
===================================MainActivity的xml布局文件,放置一个FrameLayout , 后面再把ViewPager 放到FrameLayout中
<FrameLayout
android:id="@+id/fragment_layout_null"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
========================================MainFragment 的代码
package com.example.myproject;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
public class MainFragment extends Fragment {
private ViewPager mViewPager;
// 图片资源
Integer[] data = new Integer[] { R.drawable.iamge_01, R.drawable.iamge_02,
R.drawable.iamge_03, };
private ArrayList<View> cacheViews = new ArrayList<View>();
private SlidingMenu smLeft;
private SlidingMenu smRight;
// 关联到Activity
@Override
public void onAttach(Activity activity) {
smLeft = ((MainActivity) activity).getSlidingMenuLeft();
smRight = ((MainActivity) activity).getSlidingMenuRight();
super.onAttach(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.view_pager_fragment, null);
mViewPager = (ViewPager) view.findViewById(R.id.viewpager);
ViewPagerAdapter adapter = new ViewPagerAdapter();
mViewPager.setAdapter(adapter);
mViewPager.setOnPageChangeListener(mOnPageChangeListener);
return view;
}
/**
* ViewPager监听器
*/
private OnPageChangeListener mOnPageChangeListener = new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
//只有是第一张图片的时候,才激活左侧菜单,或则都不激活左侧菜单
if (position == 0) {
smLeft.setSlidingEnabled(true);
} else {
smLeft.setSlidingEnabled(false);
}
//只有是最后一张图片的时候,才激活右侧菜单,或则都不激活右侧菜单
if (position == (data.length - 1)) {
smRight.setSlidingEnabled(true);
} else {
smRight.setSlidingEnabled(false);
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
};
/**
* ViewPager适配器
*/
class ViewPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return data.length;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
//动态生成ImageView ,将图片放到ViewPager中。
ImageView view = new ImageView(getActivity());
view.setScaleType(ScaleType.CENTER_CROP);
view.setImageResource(data[position]);
cacheViews.add(position, view);
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//销毁不显示的图片信息
View view = cacheViews.get(position);
if (view == object) {
container.removeView(view);
}
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
}
}
========================================MainFragment 所引用的Layout布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
s
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>