我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android SlidingMenu使用和示例详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android SlidingMenu使用和示例详解

很多APP都有侧滑菜单的功能,部分APP左右都是侧滑菜单~SlidingMenu 这个开源项目可以很好帮助我们实现侧滑功能,如果对SlidingMenu 还不是很了解的童鞋,可以参考下本篇博客。将侧滑菜单引入项目的方式很多中,本博客先通过例子介绍各种引入方式,然后给大家展示个实例:主布局ViewPager,左右各一个侧滑菜单的用法,差不多已经能满足大部分应用的需求了。关于常用属性,在文章末尾介绍。

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


package com.zhy.zhy_slidemenu_demo; 
import androidappActivity; 
import androidosBundle; 
import comjeremyfeinsteinslidingmenulibSlidingMenu; 
public class MainActivity extends Activity 
{ 
  @Override 
  protected void onCreate(Bundle savedInstanceState) 
  { 
    superonCreate(savedInstanceState); 
    setContentView(Rlayoutactivity_main); 
    // configure the SlidingMenu 
    SlidingMenu menu = new SlidingMenu(this); 
    menusetMode(SlidingMenuLEFT); 
    // 设置触摸屏幕的模式 
    menusetTouchModeAbove(SlidingMenuTOUCHMODE_FULLSCREEN); 
    menusetShadowWidthRes(Rdimenshadow_width); 
    menusetShadowDrawable(Rdrawableshadow); 
    // 设置滑动菜单视图的宽度 
    menusetBehindOffsetRes(Rdimenslidingmenu_offset); 
    // 设置渐入渐出效果的值 
    menusetFadeDegree(35f); 
     
    menuattachToActivity(this, SlidingMenuSLIDING_CONTENT); 
    //为侧滑菜单设置布局 
    menusetMenu(Rlayoutleftmenu); 
  } 
} 

效果图:

是不是特别简单~几行代码搞定~哈~

2、通过把Activity继承SlidingActivity

a、继承SlidingActivity

b、然后在onCreate中setBehindContentView(R.layout.leftmenu); 设置侧滑菜单的布局

c、通过getSlidingMenu()得到SlidingMenu对象,然后设置样式


package com.zhy.zhy_slidemenu_demo02; 
import androidosBundle; 
import comjeremyfeinsteinslidingmenulibSlidingMenu; 
import comjeremyfeinsteinslidingmenulibappSlidingActivity; 
public class MainActivity extends SlidingActivity 
{ 
  @Override 
  public void onCreate(Bundle savedInstanceState) 
  { 
    superonCreate(savedInstanceState); 
    setContentView(Rlayoutactivity_main); 
    setBehindContentView(Rlayoutleftmenu); 
    // configure the SlidingMenu 
    SlidingMenu menu = getSlidingMenu(); 
    menusetMode(SlidingMenuLEFT); 
    // 设置触摸屏幕的模式 
    menusetTouchModeAbove(SlidingMenuTOUCHMODE_FULLSCREEN); 
    menusetShadowWidthRes(Rdimenshadow_width); 
    menusetShadowDrawable(Rdrawableshadow); 
    // 设置滑动菜单视图的宽度 
    menusetBehindOffsetRes(Rdimenslidingmenu_offset); 
    // 设置渐入渐出效果的值 
    menusetFadeDegree(35f); 
     
    // menuattachToActivity(this, SlidingMenuSLIDING_CONTENT); 
    // menusetMenu(Rlayoutleftmenu); 
  } 
} 

效果图和第一种方式一样~是不是也很简单~~

3、将SlidingMenu当作普通控件

可以把SlidingMenu作为普通的view,然后在布局中声明,丧心病狂的玩~下面看个例子:


<RelativeLayout xmlns:android="http://schemasandroidcom/apk/res/android" 
  xmlns:tools="http://schemasandroidcom/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" > 
    <comjeremyfeinsteinslidingmenulibSlidingMenu 
      xmlns:sliding="http://schemasandroidcom/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="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://schemasandroidcom/apk/res/android" 
  android:layout_width="120dp" 
  android:layout_height="170dp" 
  android:class="lazy" data-src="@drawable/zhy" /> 

就是一张妹子图片。

最后看主Activity:


package comzhyzhy_slidemenu_demo03; 
import androidappActivity; 
import androidosBundle; 
import androidviewView; 
import androidviewViewOnClickListener; 
import comjeremyfeinsteinslidingmenulibSlidingMenu; 
public class MainActivity extends Activity 
{ 
  private SlidingMenu mLeftMenu; 
  @Override 
  protected void onCreate(Bundle savedInstanceState) 
  { 
    superonCreate(savedInstanceState); 
    setContentView(Rlayoutactivity_main); 
    mLeftMenu = (SlidingMenu) findViewById(Ridslidingmenulayout); 
    // configure the SlidingMenu 
    // SlidingMenu menu = new SlidingMenu(this); 
    mLeftMenusetMode(SlidingMenuLEFT); 
    // 设置触摸屏幕的模式 
    mLeftMenusetShadowWidthRes(Rdimenshadow_width); 
    mLeftMenusetShadowDrawable(Rdrawableshadow); 
    mLeftMenusetMenu(Rlayoutleftmenu); 
    mLeftMenusetOnClickListener(new OnClickListener() 
    { 
      @Override 
      public void onClick(View v) 
      { 
        if (mLeftMenuisMenuShowing()) 
          mLeftMenutoggle(); 
      } 
    }); 
    // 设置滑动菜单视图的宽度 
    // 设置渐入渐出效果的值 
     
  } 
} 

效果图:

通过SlidingMenu给图片设置一个滑动展示介绍,你也可以滑动显示任何东西,下载、分享按钮什么的。图片很多的时候不知道效率咋样,可以这么玩,但是不建议哈~

4、SlidingMenu设置左右侧滑菜单例子

上面介绍的3个方法,SlidingMenu的布局中控件的事件都需要写在Activity中,这样代码比较臃肿,一般会使用Fragment作为侧滑菜单的布局容器。

核心代码:


Fragment leftMenuFragment = new MenuLeftFragment(); 
    setBehindContentView(Rlayoutleft_menu_frame); 
    getSupportFragmentManager()beginTransaction() 
        replace(Ridid_left_menu_frame, leftMenuFragment)commit(); 
    SlidingMenu menu = getSlidingMenu(); 
    menusetMode(SlidingMenuLEFT_RIGHT); 
    // 设置触摸屏幕的模式 
    menusetTouchModeAbove(SlidingMenuTOUCHMODE_MARGIN); 

先给侧滑菜单通过 setBehindContentView(R.layout.left_menu_frame);设置一个布局,此布局中只有一个FrameLayout,然后使用FragmentManager将Fragment替换掉此Fragment,这样这个Fragment就作为我们侧滑菜单的布局了,我们的事件处理代码也可以写在Fragement中,而不是Activity中。

下面看具体例子:

首先分别是左右两边的两个Fragment:

MenuLeftFragment


package comzhyzhy_slidemenu_demo04; 
import javautilArrays; 
import javautilList; 
import androidosBundle; 
import androidsupportvappFragment; 
import androidviewLayoutInflater; 
import androidviewView; 
import androidviewViewGroup; 
import androidwidgetArrayAdapter; 
import androidwidgetListAdapter; 
import androidwidgetListView; 
public class MenuLeftFragment extends Fragment 
{ 
  private View mView; 
  private ListView mCategories; 
  private List<String> mDatas = Arrays 
      asList("聊天", "发现", "通讯录", "朋友圈", "订阅号"); 
  private ListAdapter mAdapter; 
  @Override 
  public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) 
  { 
    if (mView == null) 
    { 
      initView(inflater, container); 
    } 
    return mView; 
  } 
  private void initView(LayoutInflater inflater, ViewGroup container) 
  { 
    mView = inflaterinflate(Rlayoutleft_menu, container, false); 
    mCategories = (ListView) mView 
        findViewById(Ridid_listview_categories); 
    mAdapter = new ArrayAdapter<String>(getActivity(), 
        androidRlayoutsimple_list_item_1, mDatas); 
    mCategoriessetAdapter(mAdapter); 
  } 
} 

左边的侧滑布局就是一个ListView,代码比较简单~

MenuRightFragment


package comzhyzhy_slidemenu_demo04; 
import androidosBundle; 
import androidsupportvappFragment; 
import androidviewLayoutInflater; 
import androidviewView; 
import androidviewViewGroup; 
public class MenuRightFragment extends Fragment 
{ 
  private View mView; 
  @Override 
  public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) 
  { 
    if(mView == null) 
    { 
      mView = inflaterinflate(Rlayoutright_menu, container, false); 
    } 
    return mView ; 
  } 
} 

右边的侧滑菜单的Fragment,加载了一个布局,没有做任何事件处理~

最后是MainActivity


package comzhyzhy_slidemenu_demo04; 
import javautilArrayList; 
import javautilList; 
import androidosBundle; 
import androidsupportvappFragment; 
import androidsupportvappFragmentPagerAdapter; 
import androidsupportvviewViewPager; 
import androidviewView; 
import androidviewWindow; 
import comjeremyfeinsteinslidingmenulibSlidingMenu; 
import comjeremyfeinsteinslidingmenulibappSlidingFragmentActivity; 
public class MainActivity extends SlidingFragmentActivity 
{ 
  private ViewPager mViewPager; 
  private FragmentPagerAdapter mAdapter; 
  private List<Fragment> mFragments = new ArrayList<Fragment>(); 
  @Override 
  public void onCreate(Bundle savedInstanceState) 
  { 
    superonCreate(savedInstanceState); 
    thisrequestWindowFeature(WindowFEATURE_NO_TITLE); 
    setContentView(Rlayoutactivity_main); 
    // 初始化SlideMenu 
    initRightMenu(); 
    // 初始化ViewPager 
    initViewPager(); 
  } 
  private void initViewPager() 
  { 
    mViewPager = (ViewPager) findViewById(Ridid_viewpager); 
    MainTab01 tab01 = new MainTab01(); 
    MainTab02 tab02 = new MainTab02(); 
    MainTab03 tab03 = new MainTab03(); 
    mFragmentsadd(tab01); 
    mFragmentsadd(tab02); 
    mFragmentsadd(tab03); 
     
    mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) 
    { 
      @Override 
      public int getCount() 
      { 
        return mFragmentssize(); 
      } 
      @Override 
      public Fragment getItem(int arg0) 
      { 
        return mFragmentsget(arg0); 
      } 
    }; 
    mViewPagersetAdapter(mAdapter); 
  } 
  private void initRightMenu() 
  { 
    Fragment leftMenuFragment = new MenuLeftFragment(); 
    setBehindContentView(Rlayoutleft_menu_frame); 
    getSupportFragmentManager()beginTransaction() 
        replace(Ridid_left_menu_frame, leftMenuFragment)commit(); 
    SlidingMenu menu = getSlidingMenu(); 
    menusetMode(SlidingMenuLEFT_RIGHT); 
    // 设置触摸屏幕的模式 
    menusetTouchModeAbove(SlidingMenuTOUCHMODE_MARGIN); 
    menusetShadowWidthRes(Rdimenshadow_width); 
    menusetShadowDrawable(Rdrawableshadow); 
    // 设置滑动菜单视图的宽度 
    menusetBehindOffsetRes(Rdimenslidingmenu_offset); 
    // 设置渐入渐出效果的值 
    menusetFadeDegree(35f); 
    // menusetBehindScrollScale(0f); 
    menusetSecondaryShadowDrawable(Rdrawableshadow); 
    //设置右边(二级)侧滑菜单 
    menusetSecondaryMenu(Rlayoutright_menu_frame); 
    Fragment rightMenuFragment = new MenuRightFragment(); 
    getSupportFragmentManager()beginTransaction() 
        replace(Ridid_right_menu_frame, rightMenuFragment)commit(); 
  } 
  public void showLeftMenu(View view) 
  { 
    getSlidingMenu()showMenu(); 
  } 
  public void showRightMenu(View view) 
  { 
    getSlidingMenu()showSecondaryMenu(); 
  } 
} 

简单说明一下,MainActivity继承的是SlidingFragmentActivity ,在Activity中FragmentPagerAdapter和viewPager作为主布局,然后分别初始化SlidingMenu的两边的菜单。

效果图:

哈哈,微信又躺枪了~~这个例子应该可以满足一般APP的需求了。

5、SlidingMenu的一些常用属性


//设置侧滑菜单的位置,可选值LEFT , RIGHT , LEFT_RIGHT (两边都有菜单时设置)
menu.setMode(SlidingMenu.LEFT_RIGHT);
// 设置触摸屏幕的模式,可选只MARGIN , CONTENT 
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
//根据dimension资源文件的ID来设置阴影的宽度
menu.setShadowWidthRes(R.dimen.shadow_width);
//根据资源文件ID来设置滑动菜单的阴影效果
menu.setShadowDrawable(R.drawable.shadow);
// 这两个都是设置滑动菜单视图的宽度,二选一
//设置SlidingMenu离屏幕的偏移量
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
//设置宽度
menu.setBehindWidth()
// 设置渐入渐出效果的值
menu.setFadeDegree(0.35f);
//设置SlidingMenu与下方视图的移动的速度比,当为1时同时移动,取值0-1
menu.setBehindScrollScale(1.0f);
//设置二级菜单的阴影效果
menu.setSecondaryShadowDrawable(R.drawable.shadow);
//设置右边(二级)侧滑菜单
menu.setSecondaryMenu(R.layout.right_menu_frame);
//为侧滑菜单设置布局
menu.setMenu(R.layout.leftmenu);
//把滑动菜单添加进所有的Activity中,可选值SLIDING_CONTENT , SLIDING_WINDOW
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);

还有几个监听事件:


 
  public void setOnOpenListener(OnOpenListener listener) { 
    mOpenListener = listener; 
  } 
   
  public void setOnCloseListener(OnCloseListener listener) { 
    //mViewAbovesetOnCloseListener(listener); 
    mCloseListener = listener; 
  } 
   
  public void setOnOpenedListener(OnOpenedListener listener) { 
    mViewAbovesetOnOpenedListener(listener); 
  } 
   
  public void setOnClosedListener(OnClosedListener listener) { 
    mViewAbovesetOnClosedListener(listener); 
  } 

还有一些用到的时候查查把~

我把上面的所有例子包括slidingmenu的lib打了一个包~:demo

您可能感兴趣的文章:Android 开源项目侧边栏菜单(SlidingMenu)使用详解Android自定义ViewGroup打造各种风格的SlidingMenuAndroid开源组件SlidingMenu侧滑菜单使用介绍


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android SlidingMenu使用和示例详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android SlidingMenu使用和示例详解

很多APP都有侧滑菜单的功能,部分APP左右都是侧滑菜单~SlidingMenu 这个开源项目可以很好帮助我们实现侧滑功能,如果对SlidingMenu 还不是很了解的童鞋,可以参考下本篇博客。将侧滑菜单引入项目的方式很多中,本博客先通过例
2022-06-06

Android 开源项目侧边栏菜单(SlidingMenu)使用详解

项目下载地址:https://github.com/jfeinstein10/SlidingMenu 注意: SlidingMenu依赖于另一个开源项目ActionBarSherlock,所以需要将ActionBarSherlock添加作为
2022-06-06

Android中ExpandableListView使用示例详解

本文实例为大家分享了ExpandableListView使用示例,供大家参考,具体内容如下MainActivity:public class Expandable_test extends Activity { private Expan
2023-05-30

TreeSet详解和使用示例

TreeSet是Java集合框架中的一个类,它实现了SortedSet接口,底层使用红黑树实现,可以实现有序的插入和遍历。TreeSet的特点:1. TreeSet中的元素是有序的,默认按照升序排序,也可以通过Comparator自定义排序
2023-08-08

Promise.race和Promise.any使用示例详解

这篇文章主要为大家介绍了如何使用Promise.race()和Promise.any()示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

npmscript和package-lock.json使用示例详解

这篇文章主要为大家介绍了npmscript和package-lock.json使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-02

C++的new和delete使用示例详解

这篇文章主要为大家介绍了C++的new和delete使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-08

ESLint和Jest中使用esm示例详解

这篇文章主要为大家介绍了ESLint和Jest中使用esm示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-03

Android 进度条使用详解及示例代码

在这里,总结一下loading进度条的使用简单总结一下。 一、说起进度条,必须说说条形进度条,经常都会使用到嘛,特别是下载文件进度等等,还有像腾讯QQ安装进度条一样,有个进度总给人良好的用户体验。 先来找图看看,做这个图完成不用图片就可以做
2022-06-06

Android 之Preference控件基本使用示例详解

这篇文章主要为大家介绍了Android 之Preference控件基本使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-22

android教程之service使用方法示例详解

Service的生命周期 (适用于2.1及以上) 1. 被startService的无论是否有任何活动绑定到该Service,都在后台运行。onCreate(若需要) -> onStart(int id, Bundle args). 多次
2022-06-06

requestAnimationFrame使用示例详解

这篇文章主要为大家介绍了requestAnimationFrame使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-21

Collectionstream使用示例详解

这篇文章主要介绍了Collectionstream使用示例,stream流几乎可以完成对集合的任意操作,映射、去重、分组、排序、过滤等
2022-12-19

Android CardView详解及使用方法和实例

Android CardView详解 Android5.0中向我们介绍了一个全新的控件–CardView,从本质上看,可以将CardView看做是FrameLayout在自身之上添加了圆角和阴影效果。请注意:CardView被包装为一种布
2022-06-06

Vue插槽简介和使用示例详解

插槽就是子组件中的提供给父组件使用的一个占位符,用<slot></slot> 表示,父组件可以在这个占位符中填充任何模板代码,如 HTML、组件等,填充的内容会替换子组件的<slot></slot>标签,这篇文章主要介绍了Vue插槽的理解和使用,需要的朋友可以参考下
2023-03-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录