SlidingMenu 详解

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 的代码

package com.example.myproject;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.Window;
import android.widget.FrameLayout;

import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;

public class MainActivity extends FragmentActivity {

private SlidingMenu slidingMenuLeft;
private SlidingMenu slidingMenuRight;
private FrameLayout mFragmentLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
initialSlidingMenu();
initialWidgest();
}

/**
* 初始化控件
*/
private void initialWidgest() {
mFragmentLayout = (FrameLayout) findViewById(R.id.fragment_layout_null);
loadFragment();
}

/**
* 加载Fragment
*/
private void loadFragment() {
Fragment frgmt = new MainFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_layout_null, frgmt).commit();
}

/**
* 创建侧拉菜单
*/
private void initialSlidingMenu() {
//左侧菜单,默认为true;
slidingMenuLeft = new SlidingMenu(this);
slidingMenuLeft.setMode(SlidingMenu.LEFT);
slidingMenuLeft.setShadowWidthRes(R.dimen.sliding_menu_shadow_width);
slidingMenuLeft.setBehindOffsetRes(R.dimen.sliding_menu_offest);
slidingMenuLeft.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
slidingMenuLeft.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
slidingMenuLeft.setMenu(R.layout.sliding_menu_layout);
//右侧菜单,默认为false;
slidingMenuRight = new SlidingMenu(this);
slidingMenuRight.setMode(SlidingMenu.RIGHT);
slidingMenuRight.setShadowWidthRes(R.dimen.sliding_menu_shadow_width);
slidingMenuRight.setBehindOffsetRes(R.dimen.sliding_menu_offest);
slidingMenuRight.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
slidingMenuRight.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
slidingMenuRight.setMenu(R.layout.sliding_menu_layout);
slidingMenuRight.setSlidingEnabled(false);
}

public SlidingMenu getSlidingMenuLeft() {
return slidingMenuLeft;
}

public SlidingMenu getSlidingMenuRight() {
return slidingMenuRight;
}
}


===================================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>


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值