首页 > 系统 > Android > 正文

Android侧滑菜单——SlidingMenu详解使用

2019-11-09 18:22:08
字体:
来源:转载
供稿:网友

简介

SlidingMenu 是一个Android端滑动菜单组件,功能强大而且经过简单的设置,就能实现两侧滑动菜单,还可以设置菜单的阴影、渐变色、划动模式等。 SlidingMenu 是github 上Android开源项目 能用于快速集成 Android 侧滑菜单效果 Slidingmenu 里面可以包含多种组件 fragment viewpager listview 等。

环境搭建

下载SlidingMenu 点击下载新建AS项目,把SlidingMenu-master中的library文件夹(我把这个文件夹重命名为sliding_menu)拷到新建项目文件夹中与app文件夹同级在settings.gradle文件中添加 include ‘:sliding_menu’

include ‘:sliding_menu’ 4. 在build.gradle(Module:app)中添加依赖 compile PRoject(‘:sliding_menu’) dependencies { compile fileTree(include: [‘*.jar’], dir: ‘libs’) compile ‘com.android.support:appcompat-v7:21.0.2’ compile project(‘:sliding_menu’) } 5. 第4步结束后我这边就提示有错误了,修改sliding_menu的build.gradle中的一些参数,如compileSdkVerdion、buildToolsVersion与你AS相匹配(可参照app的build.gradle 中的设置)

Build/Make Project(到这步SlidingMenu就已经添加成功了)

Slidingmenu 提供属性修改

1 初始化Slidingmenu: SlidingMenu menu = getSlidingMenu();

2 setMode //设置滑动模式 设置是左滑还是右滑,还是左右都可以滑 menu.setMode(SlidingMenu.LEFT);//设置左滑菜单 menu.setMode(SlidingMenu.LEFT_RIGHT);//设置左右都可滑动 menu.setMode(SlidingMenu.TOUCHMODE_NONE);//不能手势滑动

3 设置SlidingMenu阴影 menu.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度 menu.setSecondaryShadowDrawable(R.drawable.shadowright);//设置右侧菜单阴影的图片资源 menu.setShadowDrawable(R.drawable.shadow);//设置左侧菜单阴影图片

4 设置SlidingMenu边框距离 menu.setBehindOffsetRes();//SlidingMenu滑出时距离边框的剩余宽度 menu.setBehindOffset(getWindowManager().getDefaultDisplay().getWidth() / 5); // getWindowManager().getDefaultDisplay().getWidth() / 5 表示 距离屏幕宽度 1/5

5 设置SlidingMenu渐变 menu.setFadeEnabled(true);/是否有渐变 menu.setFadeDegree(0.35f);//设置渐变比率

6 设置SlidingMenu布局

sm = getSlidingMenu(); setBehindContentView(R.layout.main_menu_frame); sm.setSecondaryMenu(R.layout.main_menu_frame_two); messageFragment = new MessageFragment(); profileFragment = new ProfileFragment(); getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame, messageFragment).commit(); getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame_two, profileFragment).commit();

设置布局有3个方法 :

setContentView(R.layout.main); //设置slidingmenu中间的布局 setBehindContentView(R.layout.main_menu_frame);//设置左侧的布局 sm.setSecondaryMenu(R.layout.main_menu_frame_two);//设置右侧的布局

使用的是左右两侧 我一般设置为 fragment getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame,messageFragment).commit(); 表示为替换 fragment

7 设置SlidingMenu滑动的拖拽效果 slidingMenu.setBehindScrollScale(0);

8 设置SlidingMenu判断打开状态 并 自动关闭或开启 menu.toggle(); 如果SlidingMenu 它是open的,它会被关闭,反之亦然。

9 设置SlidingMenu触碰屏幕的范围 menu.setTouchModeBehind(SlidingMenu.TOUCHMODE_FULLSCREEN); menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); 设置菜单滑动,触碰屏幕的范围setTouchModeAbove

10 设置SlidingMenu关闭器监听 监听主要分2种 open 和 close

open: menu.setOnOpenedListener(onOpenListener);//监听slidingmenu打开之后调用 menu.setOnOpenListener(onOpenListener);//监听slidingmenu打开时调用

close: 两个监听器 注意看了 一个是 closed 一个是 close menu.setOnClosedListener(listener); menu.setOnCloseListener(listener);

这两个的区别就是 menu.OnCloseListener(OnClosedListener);//监听Slidingmenu关闭时事件 menu.OnClosedListener(OnClosedListener);//监听Slidingmenu关闭后事件

11 设置SlidingMenu是否淡入/淡出 menu.setFadeEnabled(true);

**重点内容**12 其它 menu.showMenu();//显示SlidingMenu menu.showContent();//显示内容 menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);//使SlidingMenu附加在Activity上 menu.setMenu(R.layout.menu);//设置menu的布局文件

常见问题

提示不支持getSupportActionBar等类似的方法

解决方案:修改SlideMenu中的SlidingFragmentActiviyt类,让其继承SherlockFragmentActivity 如 class SlidingFragmentActivity extends SherlockFragmentActivity implements SlidingActivityBase

运行之后,一直提示找不到相关类

解决方案:这个问题一直困扰我一上午,由于每个开源库中都是用了android-support-v4.jar,所以我们需要将最新版本的这个.jar包分别考入到workplace中的libs文件夹中,统一他们的版本。

代码案例

这里写图片描述

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

package com.zhy.zhy_slidemenu_demo; import android.app.Activity; import android.os.Bundle; import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // configure the SlidingMenu SlidingMenu menu = new SlidingMenu(this); 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); /** * SLIDING_WINDOW will include the Title/ActionBar in the content * section of the SlidingMenu, while SLIDING_CONTENT does not. */ menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT); //为侧滑菜单设置布局 menu.setMenu(R.layout.leftmenu); } }

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

package com.zhy.zhy_slidemenu_demo02; import android.os.Bundle; import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; import com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivity; public class MainActivity extends SlidingActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setBehindContentView(R.layout.leftmenu); // 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); } }

3、将SlidingMenu当作普通控件

<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" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginTop="30dp" > <com.jeremyfeinstein.slidingmenu.lib.SlidingMenu xmlns:sliding="http://schemas.android.com/apk/res-auto" android:id="@+id/slidingmenulayout" android:layout_width="120dp" android:layout_height="170dp" android:background="#ffffffff" sliding:behindOffset="0dp" sliding:behindScrollScale="1" sliding:fadeDegree="0.3" sliding:fadeEnabled="true" sliding:touchModeAbove="fullscreen" sliding:viewAbove="@layout/pic" /> </LinearLayout> </RelativeLayout>

我们SlidingMenu作为普通View在布局文件中设置了布局,并且设置了viewAbove的值为另一个布局。 下面看pic布局:

<?xml version="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="120dp" android:layout_height="170dp" android:src="@drawable/zhy" />

就是一张妹子图片。 这里写图片描述 最后看主Activity: package com.zhy.zhy_slidemenu_demo03;

import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener;

import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;

public class MainActivity extends Activity { private SlidingMenu mLeftMenu;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mLeftMenu = (SlidingMenu) findViewById(R.id.slidingmenulayout); // configure the SlidingMenu // SlidingMenu menu = new SlidingMenu(this); mLeftMenu.setMode(SlidingMenu.LEFT); // 设置触摸屏幕的模式 mLeftMenu.setShadowWidthRes(R.dimen.shadow_width); mLeftMenu.setShadowDrawable(R.drawable.shadow); mLeftMenu.setMenu(R.layout.leftmenu); mLeftMenu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mLeftMenu.isMenuShowing()) mLeftMenu.toggle(); } }); // 设置滑动菜单视图的宽度 // 设置渐入渐出效果的值 }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表