Android侧滑菜单——SlidingMenu详解使用
来源:互联网 发布:淘宝店不开了怎么注销 编辑:程序博客网 时间:2024/05/22 05:12
简介
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(); } }); // 设置滑动菜单视图的宽度 // 设置渐入渐出效果的值 }
- Android侧滑菜单——SlidingMenu详解使用
- android初学------SlidingMenu(侧滑菜单的使用—)
- 侧滑菜单SlidingMenu的使用详解
- 侧滑菜单-- SlidingMenu 使用详解
- Android SlidingMenu侧滑菜单使用介绍
- Android SlidingMenu侧滑菜单使用介绍
- Android SlidingMenu侧滑菜单使用
- Android Studio 使用SlidingMenu侧滑菜单
- android随笔21——SlidingMenu侧滑菜单
- Android 侧滑菜单SlidingMenu
- Android SlidingMenu 侧滑菜单
- Android- SlidingMenu侧滑菜单
- 使用slidingmenu ,侧滑菜单
- android侧滑菜单框架SlidingMenu的使用
- Android侧滑菜单的使用和配置(SlidingMenu)
- Android经典侧滑菜单SlidingMenu使用介绍
- android侧滑菜单,slidingmenu集成进androidstudio以及使用
- Android经典侧滑菜单SlidingMenu使用介绍
- 位运算操作
- Jenkins-Build Monitor View
- 51NOD1781 Pinball 【离散化+线段树】
- poj_1639 Picnic Planning(度限制最小生成树)
- hadoop2.6.0伪分布式环境搭建
- Android侧滑菜单——SlidingMenu详解使用
- IO流实现文件的读写(图像、音频、视频)
- 数据库SQL语言语法总结3---查询语句
- MySQL的增删改查
- 自定义ContentProvider的简单增删除改
- 位运算在用户权限管理中的应用
- VBA-20170207-做成中
- scala基础知识学习(基于Gatling源码)1_mutale.map,case class
- OpenSSL 自建CA及签发证书