SlidingMenu 快速上手 拿来直接用

这里给大家介绍一下SlidingMenu 的使用方法

先给1个官方的链接 https://github.com/jfeinstein10/SlidingMenu  在此下载相关源码 

首先我们将包中的library取出

并将其作为依赖工程添加到我们的项目中

此时我们的Activity就可以继承一个名叫SlidingFragmentActivity的类了  然后我们可以获取到SlidingMenu对象,根据其对SlidingMenu对象进行相关配置,具体参照下面的代码  还要注意的一点是:在onCreate里 跟一般的Activity不同的是,不光要setContentView还要setBehindContentView,这就是SlidingMenu的关键了 它可以实现1个Activity有2个布局 behindContent自然是侧滑出来下面的布局了 接下来使用Fragment来填充这2个布局 他们都建立在这个继承了SlidingFragmentActivity的Activity的基础上,下面上代码大笑

package com.example.SlidingMenu;

import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.view.Window;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;

public class MyActivity extends SlidingFragmentActivity implements HomeFragment.OnHomeItemSelectedListener{
    /**
     * Called when the activity is first created.
     */
    private SlidingMenu sm;
    private FragmentManager fragmentManager;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);
        setBehindContentView(R.layout.menu);
        initSlidingMenu();
    }
    private void initSlidingMenu(){
        sm = getSlidingMenu();
        sm.setShadowWidthRes(R.dimen.shadow_width);//阴影效果的宽度
        sm.setShadowDrawable(R.drawable.shadow);//阴影效果文件
        sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);//侧滑之后保留的主菜单部分的宽度
        sm.setFadeDegree(0.35f);
        fragmentManager = getSupportFragmentManager();
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.home_layout, new HomeFragment())
                .commit();
        getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);//设置侧滑的模式,现在这种是只有在边界侧滑才有效果
    }

    /**
     *
     * @param position
     */
    @Override
    public void onButtonPressed(int position) {
        MenuFragment menuFragment = (MenuFragment) fragmentManager.findFragmentById(R.id.menu_frame);
        menuFragment.updateView(position);
    }
}

这里再追加一点知识,当用到slindingMenu的时候,大部分都会需要主fragment进行某种操作,menuFragment要响应视图变化等效果,那么就需要用到fragment的通信,我这里写了一点简单的例子

先简单描述下流程 在主fragment写一个接口,里面写一个抽象方法用来响应在此fragment的操作,接着在主fragment的onAttach的生命周期中实例此接口,具体看下面源码,然后Activity实现此接口,实现方法,再根据findFragmentById找到menuFragment对象,使用此对象对menuFragment的视图进行对应的改变,activity 的代码上面给过了 下面给出两个fragment的源码

HomeFragment

package com.example.SlidingMenu;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;

/**
 * Created by Administrator on 14-3-11.
 */
public class HomeFragment extends Fragment {
    private LinearLayout linearLayout;
    private Button blueBtn,redBtn,yellowBtn,greenBtn;
    private OnHomeItemSelectedListener onHomeItemSelectedListener;
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        onHomeItemSelectedListener = (OnHomeItemSelectedListener) activity;
    }
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initView();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return linearLayout = (LinearLayout) inflater.inflate(R.layout.main_frag,null);
    }
    public void initView(){
        blueBtn = (Button) linearLayout.findViewById(R.id.blueBtn);
        redBtn = (Button) linearLayout.findViewById(R.id.redBtn);
        yellowBtn = (Button) linearLayout.findViewById(R.id.yellowBtn);
        greenBtn = (Button) linearLayout.findViewById(R.id.greenBtn);
        blueBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onHomeItemSelectedListener.onButtonPressed(Config.BLUE_NUM);
            }
        });
        redBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onHomeItemSelectedListener.onButtonPressed(Config.RED_NUM);
            }
        });
        yellowBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onHomeItemSelectedListener.onButtonPressed(Config.YELLOW_NUM);
            }
        });
        greenBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onHomeItemSelectedListener.onButtonPressed(Config.GREEN_NUM);
            }
        });

    }
    public interface OnHomeItemSelectedListener{
        public void onButtonPressed(int position);
    }
}

MenuFragment

package com.example.SlidingMenu;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

/**
 * Created by Administrator on 14-3-11.
 */
public class MenuFragment extends Fragment{
    private LinearLayout linearLayout;
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return linearLayout = (LinearLayout) inflater.inflate(R.layout.menu_frag,null);
    }

    public void updateView(int position){
        if(position == Config.BLUE_NUM){
            linearLayout.setBackgroundColor(getActivity().getResources().getColor(R.color.blue));
        }else if(position == Config.GREEN_NUM){
            linearLayout.setBackgroundColor(getActivity().getResources().getColor(R.color.green));
        }else if(position == Config.YELLOW_NUM){
            linearLayout.setBackgroundColor(getActivity().getResources().getColor(R.color.yellow));
        }else if(position == Config.RED_NUM){
            linearLayout.setBackgroundColor(getActivity().getResources().getColor(R.color.red));
        }

    }
}


此为例子的效果图

最后给上源码包地址
http://yunpan.cn/Q4zH6GTXBSAEM

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值