zoukankan      html  css  js  c++  java
  • SlidingMenu的使用详解

    前言-

    最近自己在做一个Android的程序,需要用到一个侧滑的菜单,发现了SlidingMenu这个开源项目。简单实用,但是实战的时候遇到了许多小问题,今天来记录一下。

    SlidingMenu的使用-

    SlidingMenu是一个GitHub上面的开源类库,不是一个完整的项目,需要将它引入自己的项目,但是我没有用这种方法,所以这里先挖一个坑

    我偷了一下懒,用了一个例子里面打包好了的jar包。

    SlidingMenu常用属性和方法-

    setMenu(SlidingMenu.LEFT_RIGHT);  //设置侧滑菜单的出现位置  可选值为LEFT , RIGHT , LEFT_RIGHT

    setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);  //设置侧滑菜单的触摸模式TOUCHMODE_FULLSCREEN 全屏模式、TOUCHMODE_MARGIN 边缘模式、TOUCHMODE_NONE 禁止模式

    setShadowWidthRes(R.dimen.shadow_width);  //设置阴影宽度

    setShadowDrawable(R.drawable.shadow);  //根据资源文件ID来设置滑动菜单的阴影效果

    setSecondaryShadowDrawable(R.drawable.shadow);  //设置二级菜单的阴影效果

    setBehindWidth(400);  //设置SlidingMenu菜单的宽度

    setBehindOffsetRes(R.dimen.slidingmenu_offset);  //SlidingMenu划出时主页面显示的剩余宽度

    setBehindWidth(400);  //设置SlidingMenu菜单的宽度

    setBehindScrollScale(1.0f);  //设置SlidingMenu与下方视图的移动的速度比,当为1时同时移动,取值0-1

    setMenu(R.layout.right_menu_frame);  //侧滑菜单

    setSecondaryMenu(R.layout.menu_frame);  //设置第二侧滑菜单

    attachToActivity(this, SlidingMenu.SLIDING_CONTENT);

    //把滑动菜单添加进所有的Activity中,可选值SLIDING_CONTENT , SLIDING_WINDOW

    toggle();  //动态判断自动关闭或开启SlidingMenu

    showMenu();  //显示SlidingMenu

    showContent();  //显示内容

    SlidingMenu监听事件-

    /**
    * 设置打开监听事件,当滑动菜单被打开时调用
    */
    public void setOnOpenListener(OnOpenListener listener) {
    mOpenListener = listener;
    }
    
    /**
    * 设置关闭监听事件,当滑动菜单被关闭时调用
    */
    public void setOnCloseListener(OnCloseListener listener) {
    //mViewAbove.setOnCloseListener(listener);
    mCloseListener = listener;
    }
    
    /**
    * 设置打开监听事件,当滑动菜单被打开过之后调用
    */
    public void setOnOpenedListener(OnOpenedListener listener) {
    mViewAbove.setOnOpenedListener(listener);
    }
    
    /**
    * 设置关闭监听事件,当滑动菜单被关闭过之后调用
    */
    public void setOnClosedListener(OnClosedListener listener) {
    mViewAbove.setOnClosedListener(listener);
    } 

    实战使用-

    转自:https://blog.csdn.net/xuemengrui12/article/details/52771806

    1、在Activity中通过SlidingMenu构造方法,直接设置侧滑菜单

    a、获得SlidingMenu对象
    b、设置触摸屏幕的模式
    c、然后设置侧滑菜单的布局
     1 /**
     2  * 在Activity中通过SlidingMenu构造方法,直接设置侧滑菜单
     3  * @author Administrator
     4  *
     5  */
     6 public class MainActivity1 extends Activity {
     7    @Override
     8    protected void onCreate(Bundle savedInstanceState) {
     9       super.onCreate(savedInstanceState);
    10       setContentView(R.layout.activity_main1);
    11       // configure the SlidingMenu
    12       SlidingMenu menu = new SlidingMenu(this);
    13       menu.setMode(SlidingMenu.LEFT);
    14       // 设置触摸屏幕的模式
    15       menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
    16       menu.setShadowWidthRes(R.dimen.shadow_width);
    17       menu.setShadowDrawable(R.drawable.shadow);
    18 
    19       // 设置滑动菜单视图的宽度
    20  menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
    21       // 设置渐入渐出效果的值
    22       menu.setFadeDegree(0.35f);
    23       /**
    24        * SLIDING_WINDOW will include the Title/ActionBar in the content
    25        * section of the SlidingMenu, while SLIDING_CONTENT does not.
    26        */
    27       menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
    28       // 为侧滑菜单设置布局
    29       menu.setMenu(R.layout.left_menu);
    30    }
    31 }
    View Code

    2、通过继承SlidingActivity

    a、继承SlidingActivity
    b、然后在onCreate中setBehindContentView(R.layout.left_menu)设置侧滑菜单的布局
    c、通过getSlidingMenu()得到SlidingMenu对象,然后设置样式

    public class MainActivity2 extends SlidingActivity {
       @Override
       public  void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main1);
    
          setBehindContentView(R.layout.left_menu);
          // configure the SlidingMenu  
          SlidingMenu menu = getSlidingMenu();
          menu.setMode(SlidingMenu.LEFT);
          // 设置触摸屏幕的模式  
          menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
          menu.setShadowWidthRes(R.dimen.shadow_width);
          menu.setShadowDrawable(R.drawable.shadow);
    
          // 设置滑动菜单视图的宽度  
          menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
          // 设置渐入渐出效果的值  
          menu.setFadeDegree(0.35f);
    
       }
    View Code

    3、将SlidingMenu当作普通控件

    可以把SlidingMenu作为自定义view,然后在布局中声明使用
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          android:id="@+id/id_main_ly"
          android:layout_width="match_parent"
          android:layout_height="match_parent" >
    
          <com.jeremyfeinstein.slidingmenu.lib.SlidingMenu
          xmlns:sliding="http://schemas.android.com/apk/res-auto"
          android:id="@+id/slidingmenulayout"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="#ffffffff"
          sliding:behindOffset="0dp"
          sliding:behindScrollScale="1"
          sliding:fadeDegree="0.3"
          sliding:fadeEnabled="true"
          sliding:touchModeAbove="fullscreen"
          sliding:viewAbove="@layout/activity_content" />
          <!-- sliding:viewAbove就是主界面要显示的布局内容 -->
    
          </RelativeLayout>
    SlidingMenu相当于一个容器,用来存放将要显示的布局,viewAbove的值即为另一个布局
    看下activity_content.xml
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent" >
    
          <TextView
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:text="主界面" />
    
      </LinearLayout>
    View Code

    4、继承SlidingFragmentActivity来实现侧滑菜单

    上面的例子,SlidingMenu的布局中控件的事件都需要写在Activity中,这样代码就过于庞大了,通过继承SlidingFragmentActivity,我们可以使用Fragment作为侧滑菜单的布局容器。
    MainActiviyt4.java如下

    public class MainActivity4 extends SlidingFragmentActivity {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            this.requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.activity_main4);
            // 初始化SlidingMenu
            initFragmentMenu();
    
    
        }
    
        private void initFragmentMenu() {
    
            Fragment leftMenuFragment = new LeftMenuFragment();
            setBehindContentView(R.layout.left_menu_frame);
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.layout_left_menu_frame, leftMenuFragment)
                    .commit();
            SlidingMenu menu = getSlidingMenu();
            menu.setMode(SlidingMenu.LEFT_RIGHT);
            // 设置触摸屏幕的模式
            menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
            menu.setShadowWidthRes(R.dimen.shadow_width);
            menu.setShadowDrawable(R.drawable.shadow);
            // 设置滑动菜单视图的宽度
            menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
            // menu.setBehindWidth()
            // 设置渐入渐出效果的值
            menu.setFadeDegree(0.35f);
            // menu.setBehindScrollScale(1.0f);
            menu.setSecondaryShadowDrawable(R.drawable.shadow);
            // 设置右边(二级)侧滑菜单
            menu.setSecondaryMenu(R.layout.right_menu_frame);
            Fragment rightMenuFragment = new RightMenuFragment();
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.layout_right_menu_frame, rightMenuFragment)
                    .commit();
        }
    
        public void showLeftMenu(View view) {
            getSlidingMenu().showMenu();
        }
    
        public void showRightMenu(View view) {
            getSlidingMenu().showSecondaryMenu();
        }
    }
    View Code

    核心代码:
    Fragment leftMenuFragment = new LeftMenuFragment();
    setBehindContentView(R.layout.left_menu_frame);
    getSupportFragmentManager().beginTransaction()
    .replace(R.id.frm_left_menu_layout, leftMenuFragment).commit();
    首先给侧滑菜单通过 setBehindContentView(R.layout.left_menu_frame); 设置一个布局,此布局中只有一个FrameLayout,然后使用FragmentManager将Fragment替换掉此Fragment,这样这个 Fragment就作为我们侧滑菜单的布局了,我们的事件处理代码也可以写在Fragement中,而不是Activity中。Fragment作为我们的菜单界面,就任由自己发挥了

    感谢大佬:爆米花9958 

    原文:https://blog.csdn.net/xuemengrui12/article/details/52771806

  • 相关阅读:
    大道至简阅读笔记03
    团队项目二阶段-个人总结07
    团队项目二阶段-个人总结06
    团队项目二阶段-个人总结05
    学习进度条06
    领扣(LeetCode)单调数列 个人题解
    领扣(LeetCode)数字转换为十六进制数 个人题解
    领扣(LeetCode)字符串相加 个人题解
    领扣(LeetCode)删除链表中的节点 个人题解
    领扣(LeetCode)有效的括号 个人题解
  • 原文地址:https://www.cnblogs.com/YFEYI/p/10708085.html
Copyright © 2011-2022 走看看