SlidingMenu简介
SlidingMenu的是一种比较新的设置界面或配置界面效果,在主界面左滑或者右滑出现设置界面,能方便的进行各种操作.目前有大量的应用都在使用这一效果。如Evernote、Google+、Foursquare等,国内的豌豆夹,人人,360手机助手等都使用SlidingMenu的界面方案。

SlidingMenu github项目地址:https://github.com/jfeinstein10/SlidingMenu

关于SlidingMenu Demo导入 请参考前一篇文章,这里不重复介绍了。

SlidingMenu 常用属性介绍
mSlidingMenu.setMode(SlidingMenu.LEFT);//设置左滑菜单
mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的屏幕范围,该设置为全屏区域都可以滑动
mSlidingMenu.setShadowDrawable(R.drawable.shadow);//设置阴影图片
mSlidingMenu.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度
mSlidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度
mSlidingMenu.setBehindWidth(400);//设置SlidingMenu菜单的宽度
mSlidingMenu.setFadeDegree(0.35f);//SlidingMenu滑动时的渐变程度
mSlidingMenu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);//使SlidingMenu附加在Activity上
mSlidingMenu.setMenu(R.layout.menu_layout);//设置menu的布局文件
mSlidingMenu.toggle();//动态判断自动关闭或开启SlidingMenu
mSlidingMenu.showMenu();//显示SlidingMenu
mSlidingMenu.showContent();//显示内容
mSlidingMenu.setOnOpenListener(onOpenListener);//监听SlidingMenu打开
关于关闭menu有两个监听,简单的来说,对于menu close事件,一个是when,一个是after 
mSlidingMenu.OnClosedListener(OnClosedListener);//监听SlidingMenu关闭时事件
mSlidingMenu.OnClosedListener(OnClosedListener);//监听SlidingMenu关闭后事件

mSlidingMenu.setMode(SlidingMenu.LEFT_RIGHT);//设置左右都可以划出SlidingMenu菜单
mSlidingMenu.setSecondaryMenu(R.layout.frame_menu);//设置右侧菜单的布局文件

mSlidingMenu.setSecondaryShadowDrawable(R.drawable.shadowright);//右侧菜单的阴影图片

使用Fragment实现SlidingMenu
1.首先Activity继承自SlidingMenu包下的SlidingFragmentActivity
2. setContentView(R.layout.content_frame);//该layout为一个全屏的FrameLayout
3. setBehindContentView(R.layout.menu_frame);//设置SlidingMenu使用的布局,同样是一个全屏的FrameLayout

4.设置SlidingMenu左侧菜单的Fragment

frame_menu.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/menu"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent" />

frame_content.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/content"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent" />

布局文件准备好了后,新建一个 Activity来继承SlidingActivity(如果需要使用Support V4兼容包,请继承SlidingFragmentActivity)

[java] view plaincopy
  1. package com.example.slidingmenufragmenttest;
  2. import android.annotation.SuppressLint;
  3. import android.app.Fragment;
  4. import android.app.FragmentManager;
  5. import android.app.FragmentTransaction;
  6. import android.os.Bundle;
  7. import android.util.Log;
  8. import android.view.Menu;
  9. import android.view.MenuItem;
  10. import com.example.slidingmenufragmenttest.fragment.CommunityFragment;
  11. import com.example.slidingmenufragmenttest.fragment.FindPeopleFragment;
  12. import com.example.slidingmenufragmenttest.fragment.HomeFragment;
  13. import com.example.slidingmenufragmenttest.fragment.MenuFragment;
  14. import com.example.slidingmenufragmenttest.fragment.MenuFragment.SLMenuListOnItemClickListener;
  15. import com.example.slidingmenufragmenttest.fragment.PagesFragment;
  16. import com.example.slidingmenufragmenttest.fragment.PhotosFragment;
  17. import com.example.slidingmenufragmenttest.fragment.WhatsHotFragment;
  18. import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
  19. import com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivity;
  20. public class MainActivity extends SlidingActivity implements SLMenuListOnItemClickListener{
  21. //  public class MainActivity extends SlidingFragmentActivity {
  22. private SlidingMenu mSlidingMenu;
  23. @SuppressLint("NewApi")
  24. @Override
  25. public void onCreate(Bundle savedInstanceState) {
  26. super.onCreate(savedInstanceState);
  27. setTitle("Home");
  28. //      setTitle(R.string.sliding_title);
  29. setContentView(R.layout.frame_content);
  30. //1、 set the Behind View
  31. setBehindContentView(R.layout.frame_menu);
  32. // customize the SlidingMenu
  33. mSlidingMenu = getSlidingMenu();
  34. //      mSlidingMenu.setMenu(R.layout.frame_menu);  //设置左侧菜单的布局文件
  35. //      mSlidingMenu.setSecondaryMenu(R.layout.frame_menu); 设置右侧菜单的布局文件
  36. //      mSlidingMenu.setShadowWidth(5);
  37. //      mSlidingMenu.setBehindOffset(100);
  38. mSlidingMenu.setShadowDrawable(R.drawable.drawer_shadow);//设置阴影图片
  39. mSlidingMenu.setShadowWidthRes(R.dimen.shadow_width); //设置阴影图片的宽度
  40. mSlidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset); //SlidingMenu划出时主页面显示的剩余宽度
  41. mSlidingMenu.setFadeDegree(0.35f);
  42. //设置SlidingMenu 的手势模式
  43. //TOUCHMODE_FULLSCREEN 全屏模式,在整个content页面中,滑动,可以打开SlidingMenu
  44. //TOUCHMODE_MARGIN 边缘模式,在content页面中,如果想打开SlidingMenu,你需要在屏幕边缘滑动才可以打开SlidingMenu
  45. //TOUCHMODE_NONE 不能通过手势打开SlidingMenu
  46. mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
  47. //设置 SlidingMenu 内容
  48. FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
  49. MenuFragment menuFragment = new MenuFragment();
  50. fragmentTransaction.replace(R.id.menu, menuFragment);
  51. fragmentTransaction.replace(R.id.content, new HomeFragment());
  52. fragmentTransaction.commit();
  53. //使用左上方icon可点,这样在onOptionsItemSelected里面才可以监听到R.id.home
  54. getActionBar().setDisplayHomeAsUpEnabled(true);
  55. }
  56. @Override
  57. public boolean onCreateOptionsMenu(Menu menu) {
  58. // Inflate the menu; this adds items to the action bar if it is present.
  59. getMenuInflater().inflate(R.menu.main, menu);
  60. return true;
  61. }
  62. @Override
  63. public boolean onOptionsItemSelected(MenuItem item) {
  64. switch (item.getItemId()) {
  65. case android.R.id.home:
  66. toggle(); //动态判断自动关闭或开启SlidingMenu
  67. //          getSlidingMenu().showMenu();//显示SlidingMenu
  68. //          getSlidingMenu().showContent();//显示内容
  69. return true;
  70. }
  71. return super.onOptionsItemSelected(item);
  72. }
  73. @SuppressLint("NewApi")
  74. @Override
  75. public void selectItem(int position, String title) {
  76. // update the main content by replacing fragments
  77. Fragment fragment = null;
  78. switch (position) {
  79. case 0:
  80. fragment = new HomeFragment();
  81. break;
  82. case 1:
  83. fragment = new FindPeopleFragment();
  84. break;
  85. case 2:
  86. fragment = new PhotosFragment();
  87. break;
  88. case 3:
  89. fragment = new CommunityFragment();
  90. break;
  91. case 4:
  92. fragment = new PagesFragment();
  93. break;
  94. case 5:
  95. fragment = new WhatsHotFragment();
  96. break;
  97. default:
  98. break;
  99. }
  100. if (fragment != null) {
  101. FragmentManager fragmentManager = getFragmentManager();
  102. fragmentManager.beginTransaction()
  103. .replace(R.id.content, fragment).commit();
  104. // update selected item and title, then close the drawer
  105. setTitle(title);
  106. mSlidingMenu.showContent();
  107. } else {
  108. // error in creating fragment
  109. Log.e("MainActivity", "Error in creating fragment");
  110. }
  111. }
  112. }

SlidingMenu 菜单Fragment

[java] view plaincopy
  1. package com.example.slidingmenufragmenttest.fragment;
  2. import java.util.ArrayList;
  3. import android.annotation.SuppressLint;
  4. import android.app.Activity;
  5. import android.app.Fragment;
  6. import android.content.res.TypedArray;
  7. import android.os.Bundle;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11. import android.widget.AdapterView;
  12. import android.widget.AdapterView.OnItemClickListener;
  13. import android.widget.ListView;
  14. import com.example.slidingmenufragmenttest.R;
  15. import com.example.slidingmenufragmenttest.adapter.NavDrawerListAdapter;
  16. import com.example.slidingmenufragmenttest.entity.NavDrawerItem;
  17. @SuppressLint("NewApi")
  18. public class MenuFragment extends Fragment implements OnItemClickListener {
  19. private ListView mDrawerList;
  20. private String[] mNavMenuTitles;
  21. private TypedArray mNavMenuIconsTypeArray;
  22. private ArrayList<NavDrawerItem> mNavDrawerItems;
  23. private NavDrawerListAdapter mAdapter;
  24. private SLMenuListOnItemClickListener mCallback;
  25. private int selected = -1;
  26. @Override
  27. public void onAttach(Activity activity) {
  28. try {
  29. mCallback = (SLMenuListOnItemClickListener) activity;
  30. } catch (ClassCastException e) {
  31. throw new ClassCastException(activity.toString()
  32. + " must implement OnResolveTelsCompletedListener");
  33. }
  34. super.onAttach(activity);
  35. }
  36. @Override
  37. public void onCreate(Bundle savedInstanceState) {
  38. // TODO Auto-generated method stub
  39. super.onCreate(savedInstanceState);
  40. }
  41. @Override
  42. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  43. Bundle savedInstanceState) {
  44. View rootView = inflater.inflate(R.layout.fragment_menu, null);
  45. findView(rootView);
  46. return rootView;
  47. }
  48. private void findView(View rootView) {
  49. mDrawerList = (ListView) rootView.findViewById(R.id.left_menu);
  50. mNavMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
  51. // nav drawer icons from resources
  52. mNavMenuIconsTypeArray = getResources()
  53. .obtainTypedArray(R.array.nav_drawer_icons);
  54. mNavDrawerItems = new ArrayList<NavDrawerItem>();
  55. // adding nav drawer items to array
  56. // Home
  57. mNavDrawerItems.add(new NavDrawerItem(mNavMenuTitles[0], mNavMenuIconsTypeArray
  58. .getResourceId(0, -1)));
  59. // Find People
  60. mNavDrawerItems.add(new NavDrawerItem(mNavMenuTitles[1], mNavMenuIconsTypeArray
  61. .getResourceId(1, -1)));
  62. // Photos
  63. mNavDrawerItems.add(new NavDrawerItem(mNavMenuTitles[2], mNavMenuIconsTypeArray
  64. .getResourceId(2, -1)));
  65. // Communities, Will add a counter here
  66. mNavDrawerItems.add(new NavDrawerItem(mNavMenuTitles[3], mNavMenuIconsTypeArray
  67. .getResourceId(3, -1), true, "22"));
  68. // Pages
  69. mNavDrawerItems.add(new NavDrawerItem(mNavMenuTitles[4], mNavMenuIconsTypeArray
  70. .getResourceId(4, -1)));
  71. // What's hot, We will add a counter here
  72. mNavDrawerItems.add(new NavDrawerItem(mNavMenuTitles[5], mNavMenuIconsTypeArray
  73. .getResourceId(5, -1), true, "50+"));
  74. // Recycle the typed array
  75. mNavMenuIconsTypeArray.recycle();
  76. // setting the nav drawer list adapter
  77. mAdapter = new NavDrawerListAdapter(getActivity(),
  78. mNavDrawerItems);
  79. mDrawerList.setAdapter(mAdapter);
  80. mDrawerList.setOnItemClickListener(this);
  81. if(selected!=-1){
  82. mDrawerList.setItemChecked(selected, true);
  83. mDrawerList.setSelection(selected);
  84. }else{
  85. mDrawerList.setItemChecked(0, true);
  86. mDrawerList.setSelection(0);
  87. }
  88. }
  89. @Override
  90. public void onItemClick(AdapterView<?> parent, View view, int position,
  91. long id) {
  92. // update selected item and title, then close the drawer
  93. mDrawerList.setItemChecked(position, true);
  94. mDrawerList.setSelection(position);
  95. if(mCallback!=null){
  96. mCallback.selectItem(position, mNavMenuTitles[position]);
  97. }
  98. selected = position;
  99. }
  100. /**
  101. * 左侧菜单 点击回调接口
  102. * @author FX_SKY
  103. *
  104. */
  105. public interface SLMenuListOnItemClickListener{
  106. public void selectItem(int position,String title);
  107. }
  108. }

内容Fragment

[java] view plaincopy
  1. package com.example.slidingmenufragmenttest.fragment;
  2. import android.annotation.SuppressLint;
  3. import android.app.Fragment;
  4. import android.os.Bundle;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import com.example.slidingmenufragmenttest.R;
  9. @SuppressLint("NewApi")
  10. public class HomeFragment extends Fragment {
  11. public HomeFragment(){}
  12. @Override
  13. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  14. Bundle savedInstanceState) {
  15. View rootView = inflater.inflate(R.layout.fragment_home, container, false);
  16. return rootView;
  17. }
  18. }

SlidingMenu 菜单List 点击事件是通过回调接口在MainActivity中执行的

[java] view plaincopy
  1. @Override
  2. public void onItemClick(AdapterView<?> parent, View view, int position,
  3. long id) {
  4. // update selected item and title, then close the drawer
  5. mDrawerList.setItemChecked(position, true);
  6. mDrawerList.setSelection(position);
  7. if(mCallback!=null){
  8. mCallback.selectItem(position, mNavMenuTitles[position]);
  9. }
  10. selected = position;
  11. }
  12. /**
  13. * 左侧菜单 点击回调接口
  14. * @author FX_SKY
  15. *
  16. */
  17. public interface SLMenuListOnItemClickListener{
  18. public void selectItem(int position,String title);
  19. }

运行效果如下:

Demo下载地址:http://download.csdn.net/detail/fx_sky/6723039

Android SlidingMenu 开源项目使用示例(一)相关推荐

  1. Android SlidingMenu 开源项目 侧拉菜单的使用(详细配置)

    SlidingMenu作为最常用到的几个开源项目之一,最初,这个是在IOS上有的,之后被应用到了android上,在google自己原生态的侧拉菜单NavigationDrawer没出现之前,这个效果 ...

  2. 安卓巴士总结了近百个Android优秀开源项目

    安卓巴士总结了近百个Android优秀开源项目 转自:http://sfshine.iteye.com/blog/1724962 Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了 ...

  3. 安卓巴士总结了近百个Android优秀开源项目,覆盖Android开发的每个领域_拔剑-浆糊的传说_新浪博客...

    http://www.apkbus.com/android-17627-1-1.html 安卓巴士总结了近百个Android优秀开源项目,覆盖Android开发的每个领域 bayou 发表于 2011 ...

  4. 2018.11月Android优质开源项目

    2019独角兽企业重金招聘Python工程师标准>>> 2018.11月Android优质开源项目 转载于:https://my.oschina.net/coderminer/blo ...

  5. 【UI学习】Android github开源项目,酷炫自定义控件(View)汇总

    [UI学习]Android github开源项目,酷炫自定义控件(View)汇总 转载  2016年09月04日 23:23:15 3484 近期整理的比较酷炫并且我们会经常用到的custom vie ...

  6. Android x86开源项目虚拟机镜像下载(VM/Vbox)

    Android x86 开源项目可以让我们在虚拟机中直接运行Android系统,这里的x86指的是平台架构非32位版. 如果你曾经查找过VMware 虚拟机安装 Android 的教程,应该了解直接安 ...

  7. Android常见开源项目的原理及使用方法

    Android常见开源项目的原理及使用方法 http://www.duobei.com/course/4514662053 [课程目标]  提升Android技术,提升软件设计技能,迈向架构师 [课程 ...

  8. Android常用开源项目

    Android开源项目第一篇--个性化控件(View)篇   包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Progre ...

  9. 源码下载:74个Android开发开源项目汇总

    1. ActionBarSherlock ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便地使用所 ...

最新文章

  1. NET(C#)连接各类数据库-集锦
  2. 请收藏,Linux 运维必备的 40 个命令总结,收好了~
  3. scala 主构造函数_在Scala中,如何在类的主构造函数中定义局部参数?
  4. 前端学习(1889)vue之电商管理系统电商系统之绘制用户列表组件的基本布局
  5. h5 nan_h5页面在不同ios设备上的问题总结
  6. 一篇文章快速搞懂C++生成随机数
  7. 吴恩达神经网络和深度学习-学习笔记-16-超参数的系统的调整方法
  8. 前端练手项目合集40.0个,附源码,2022年最新
  9. php sns 源码,ThinkSNS V2.3源码下载(SNS系统)
  10. 深度卷积神经网络(一)
  11. 刷脸自助登记 访客管理不再潦草应对!
  12. 通过YUV空间调节图像的色度和饱和度
  13. SC92F8003读24C64程序
  14. html如何实现3d动画,基于webGL和HTML5的网页3D动画的设计与实现.pdf
  15. 无界函数的反常积分的收敛法
  16. 一款基于ffplay的视频播放器
  17. 2019杭州小学入学报名指南
  18. Dynamo 删除元素
  19. 即时通讯实时视频聊天技术提供QoS保证的方法
  20. 如何使用xcode将应用安装到IPhone上

热门文章

  1. window.parent.open弹出多个界面,界面间互相传值
  2. Angularjs常见错误原因及解决Error: [$injector:unpr] http://errors.angularjs.org/1.2.9/$injector/unpr?
  3. (十一)java.io.File学习进阶及separator、pathSeparator分隔符简介
  4. 饥荒海难创建显示专用服务器,饥荒海难控制台使用教程及小技巧_快吧单机游戏...
  5. IDEA插件系列(89):Copy/Paste Stack插件——复制/粘贴工具栈
  6. 设位于第一象限的曲线y=f(x)上的任一点P(x,y)的切线在x轴上的截距等于该点发现在y轴上截距的相反数,且曲线经过(1,0),求该曲线
  7. 安装cPanelWHM 技巧
  8. 2007年12月全球十大搜索引擎
  9. 手机chrome没有声音_Chrome浏览器没有声音,解决windows10Chrome浏览器没有声音的问题...
  10. winxp右键进入dos