安卓框架——SlidingMenu使用技巧

简介: SlidingMenu的一些常用属性原文转载http://blog.csdn.net/zwl5670/article/details/48274109[java] view plain copy //设置侧滑菜单的位置,可选值LEFT , RIGHT ,LEFT_RIGHT(两边都有菜单时设置)  menu.

SlidingMenu的一些常用属性

原文转载http://blog.csdn.net/zwl5670/article/details/48274109

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //设置侧滑菜单的位置,可选值LEFT , RIGHT ,LEFT_RIGHT(两边都有菜单时设置)  
  2. menu.setMode(SlidingMenu.LEFT_RIGHT);  
  3. //设置触摸屏幕的模式,可选只MARGIN ,CONTENT   
  4.        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);  
  5. //根据dimension资源文件的ID来设置阴影的宽度  
  6.        menu.setShadowWidthRes(R.dimen.shadow_width);  
  7. //根据资源文件ID来设置滑动菜单的阴影效果  
  8.        menu.setShadowDrawable(R.drawable.shadow);  
  9. //这两个都是设置滑动菜单视图的宽度,二选一  
  10.     //设置SlidingMenu离屏幕的偏移量  
  11.        menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);  
  12.        //设置宽度  
  13.        menu.setBehindWidth()  
  14. // 设置渐入渐出效果的值  
  15.        menu.setFadeDegree(0.35f);  
  16. //设置SlidingMenu与下方视图的移动的速度比,当为1时同时移动,取值0-1  
  17.        menu.setBehindScrollScale(1.0f);  
  18. //设置二级菜单的阴影效果  
  19.        menu.setSecondaryShadowDrawable(R.drawable.shadow);  
  20. //设置右边(二级)侧滑菜单  
  21.        menu.setSecondaryMenu(R.layout.right_menu_frame);  
  22. //为侧滑菜单设置布局  
  23.        menu.setMenu(R.layout.leftmenu);  
  24. //把滑动菜单添加进所有的Activity中,可选值SLIDING_CONTENT, SLIDING_WINDOW  
  25.        menu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);  


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

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class MainActivity extends Activity{   
  2.     @Override    
  3.    protected void onCreate(BundlesavedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.            setContentView(R.layout.activity_main);    
  6.             SlidingMenu menu = new SlidingMenu(this);//初始化滑动菜单  
  7.         menu.setMode(SlidingMenu.LEFT);//设置触摸屏幕的模式  
  8.         menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);  
  9.         menu.setShadowWidthRes(R.dimen.shadow_width);//设置阴影的宽度  
  10.         menu.setShadowDrawable(R.drawable.shadow);//设置滑动菜单的阴影效果  
  11.         // 设置滑动菜单视图的宽度  
  12.         menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);  
  13.         // 设置渐入渐出效果的值  
  14.         menu.setFadeDegree(0.35f);  
  15.         /** 
  16.          *SLIDING_WINDOW will include the Title/ActionBar in the content 
  17.          *section of the SlidingMenu, while SLIDING_CONTENT does not. 
  18.          */  
  19.         // 把滑动菜单添加进所有的Activity中   
  20.         menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);  
  21.         // 为侧滑菜单设置布局    
  22.       menu.setMenu(R.layout.leftmenu);  
  23.     }    
  24. }    


2、通过把Activity继承SlidingActivity 

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

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class MainActivity extends SlidingActivity  {    
  2.     @Override    
  3.     public void onCreate(Bundle savedInstanceState) {    
  4.         super.onCreate(savedInstanceState);    
  5.         setContentView(R.layout.activity_main);    
  6.     
  7.         setBehindContentView(R.layout.leftmenu);    
  8.         // configure the SlidingMenu    
  9.         SlidingMenu menu = getSlidingMenu();    
  10.         menu.setMode(SlidingMenu.LEFT);    
  11.         // 设置触摸屏幕的模式    
  12.         menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);    
  13.         menu.setShadowWidthRes(R.dimen.shadow_width);    
  14.         menu.setShadowDrawable(R.drawable.shadow);    
  15.     
  16.         // 设置滑动菜单视图的宽度    
  17.         menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);    
  18.         // 设置渐入渐出效果的值    
  19.         menu.setFadeDegree(0.35f);    
  20.         /**  
  21.          * SLIDING_WINDOW will include the Title/ActionBar in the content  
  22.          * section of the SlidingMenu, while SLIDING_CONTENT does not.  
  23.          */    
  24.         // menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);    
  25.         // menu.setMenu(R.layout.leftmenu);    
  26.     }    
  27. }    


 

3、将SlidingMenu当作普通控件

可以把SlidingMenu作为普通的view,然后在布局中声明。

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    
  2.     xmlns:tools="http://schemas.android.com/tools"    
  3.     android:id="@+id/id_main_ly"    
  4.     android:layout_width="match_parent"    
  5.     android:layout_height="match_parent" >    
  6.     
  7.     <LinearLayout    
  8.         android:layout_width="wrap_content"    
  9.         android:layout_height="wrap_content"    
  10.         android:layout_marginLeft="30dp"    
  11.         android:layout_marginTop="30dp" >    
  12.     
  13.     
  14.         <com.jeremyfeinstein.slidingmenu.lib.SlidingMenu    
  15.             xmlns:sliding="http://schemas.android.com/apk/res-auto"    
  16.             android:id="@+id/slidingmenulayout"    
  17.             android:layout_width="120dp"    
  18.             android:layout_height="170dp"    
  19.             android:background="#ffffffff"    
  20.             sliding:behindOffset="0dp"    
  21.             sliding:behindScrollScale="1"    
  22.             sliding:fadeDegree="0.3"    
  23.             sliding:fadeEnabled="true"    
  24.             sliding:touchModeAbove="fullscreen"    
  25.             sliding:viewAbove="@layout/pic" />    
  26.     </LinearLayout>    
  27.     
  28. </RelativeLayout>    


 

pic布局:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>    
  2. <ImageView xmlns:android="http://schemas.android.com/apk/res/android"    
  3.     android:layout_width="120dp"    
  4.     android:layout_height="170dp"    
  5.     android:src="@drawable/zhy" />    


 

MainActivity

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.zhy.zhy_slidemenu_demo03;    
  2.     
  3. import android.app.Activity;    
  4. import android.os.Bundle;    
  5. import android.view.View;    
  6. import android.view.View.OnClickListener;    
  7.     
  8. import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;    
  9.     
  10. public class MainActivity extends Activity    
  11. {    
  12.     private SlidingMenu mLeftMenu;    
  13.     
  14.     @Override    
  15.     protected void onCreate(Bundle savedInstanceState)    
  16.     {    
  17.         super.onCreate(savedInstanceState);    
  18.         setContentView(R.layout.activity_main);    
  19.     
  20.         mLeftMenu = (SlidingMenu) findViewById(R.id.slidingmenulayout);    
  21.         // configure the SlidingMenu    
  22.         // SlidingMenu menu = new SlidingMenu(this);    
  23.         mLeftMenu.setMode(SlidingMenu.LEFT);    
  24.         // 设置触摸屏幕的模式    
  25.         mLeftMenu.setShadowWidthRes(R.dimen.shadow_width);    
  26.         mLeftMenu.setShadowDrawable(R.drawable.shadow);    
  27.     
  28.         mLeftMenu.setMenu(R.layout.leftmenu);    
  29.     
  30.         mLeftMenu.setOnClickListener(new OnClickListener()    
  31.         {    
  32.             @Override    
  33.             public void onClick(View v)    
  34.             {    
  35.                 if (mLeftMenu.isMenuShowing())    
  36.                     mLeftMenu.toggle();    
  37.             }    
  38.         });    
  39.         // 设置滑动菜单视图的宽度    
  40.         // 设置渐入渐出效果的值    
  41.         /**  
  42.          * SLIDING_WINDOW will include the Title/ActionBar in the content  
  43.          * section of the SlidingMenu, while SLIDING_CONTENT does not.  
  44.          */    
  45.     }    
  46. }    


 

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

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

· 

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1.  Fragment leftMenuFragment = new MenuLeftFragment();    
  2. ·          setBehindContentView(R.layout.left_menu_frame);    
  3. ·          getSupportFragmentManager().beginTransaction()    
  4. ·                  .replace(R.id.id_left_menu_frame, leftMenuFragment).commit();    
  5. ·          SlidingMenu menu = getSlidingMenu();    
  6. ·          menu.setMode(SlidingMenu.LEFT_RIGHT);    
  7. ·          // 设置触摸屏幕的模式    
  8. ·          menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);   

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

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.zhy.zhy_slidemenu_demo04;    
  2.     
  3. import java.util.Arrays;    
  4. import java.util.List;    
  5.     
  6. import android.os.Bundle;    
  7. import android.support.v4.app.Fragment;    
  8. import android.view.LayoutInflater;    
  9. import android.view.View;    
  10. import android.view.ViewGroup;    
  11. import android.widget.ArrayAdapter;    
  12. import android.widget.ListAdapter;    
  13. import android.widget.ListView;    
  14.     
  15. public class MenuLeftFragment extends Fragment    
  16. {    
  17.     private View mView;    
  18.     private ListView mCategories;    
  19.     private List<String> mDatas = Arrays    
  20.             .asList("聊天""发现""通讯录""朋友圈""订阅号");    
  21.     private ListAdapter mAdapter;    
  22.     
  23.     @Override    
  24.     public View onCreateView(LayoutInflater inflater, ViewGroup container,    
  25.             Bundle savedInstanceState)  {    
  26.         if (mView == null)  {    
  27.             initView(inflater, container);    
  28.         }    
  29.         return mView;    
  30.     }    
  31.     
  32.     private void initView(LayoutInflater inflater, ViewGroup container)   {    
  33.         mView = inflater.inflate(R.layout.left_menu, container, false);    
  34.         mCategories = (ListView) mView    
  35.                 .findViewById(R.id.id_listview_categories);    
  36.         mAdapter = new ArrayAdapter<String>(getActivity(),    
  37.                 android.R.layout.simple_list_item_1, mDatas);    
  38.         mCategories.setAdapter(mAdapter);    
  39.     }    
  40. }    
  41. MenuRightFragment  
  42. package com.zhy.zhy_slidemenu_demo04;    
  43.     
  44. import android.os.Bundle;    
  45. import android.support.v4.app.Fragment;    
  46. import android.view.LayoutInflater;    
  47. import android.view.View;    
  48. import android.view.ViewGroup;    
  49.     
  50. public class MenuRightFragment extends Fragment {    
  51.     private View mView;    
  52.     
  53.     @Override    
  54.     public View onCreateView(LayoutInflater inflater, ViewGroup container,    
  55.             Bundle savedInstanceState) {    
  56.         if(mView == null) {    
  57.             mView = inflater.inflate(R.layout.right_menu, container, false);    
  58.         }    
  59.         return mView ;    
  60.     }    
  61. }    


MainActivity  

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class MainActivity extends SlidingFragmentActivity  {    
  2.     
  3.     private ViewPager mViewPager;    
  4.     private FragmentPagerAdapter mAdapter;    
  5.     private List<Fragment> mFragments = new ArrayList<Fragment>();    
  6.     
  7.     @Override    
  8.     public void onCreate(Bundle savedInstanceState)  {    
  9.         super.onCreate(savedInstanceState);    
  10.         this.requestWindowFeature(Window.FEATURE_NO_TITLE);    
  11.         setContentView(R.layout.activity_main);    
  12.         // 初始化SlideMenu    
  13.         initRightMenu();    
  14.         // 初始化ViewPager    
  15.         initViewPager();    
  16.     }    
  17.     
  18.     private void initViewPager()   {    
  19.         mViewPager = (ViewPager) findViewById(R.id.id_viewpager);    
  20.         MainTab01 tab01 = new MainTab01();    
  21.         MainTab02 tab02 = new MainTab02();    
  22.         MainTab03 tab03 = new MainTab03();    
  23.         mFragments.add(tab01);    
  24.         mFragments.add(tab02);    
  25.         mFragments.add(tab03);    
  26.         /**  
  27.          * 初始化Adapter  
  28.          */    
  29.         mAdapter = new FragmentPagerAdapter(getSupportFragmentManager())  {    
  30.             @Override    
  31.             public int getCount()   {    
  32.                 return mFragments.size();    
  33.             }    
  34.     
  35.             @Override    
  36.             public Fragment getItem(int arg0)   {    
  37.                 return mFragments.get(arg0);    
  38.             }    
  39.         };    
  40.         mViewPager.setAdapter(mAdapter);    
  41.     }    
  42.     
  43.     private void initRightMenu()  {    
  44.         Fragment leftMenuFragment = new MenuLeftFragment();    
  45.         setBehindContentView(R.layout.left_menu_frame);    
  46.         getSupportFragmentManager().beginTransaction()    
  47.                 .replace(R.id.id_left_menu_frame, leftMenuFragment).commit();    
  48.         SlidingMenu menu = getSlidingMenu();    
  49.         menu.setMode(SlidingMenu.LEFT_RIGHT);    
  50.         // 设置触摸屏幕的模式    
  51.         menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);    
  52.         menu.setShadowWidthRes(R.dimen.shadow_width);    
  53.         menu.setShadowDrawable(R.drawable.shadow);    
  54.         // 设置滑动菜单视图的宽度    
  55.         menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);    
  56.         // 设置渐入渐出效果的值    
  57.         menu.setFadeDegree(0.35f);    
  58.         // menu.setBehindScrollScale(1.0f);    
  59.         menu.setSecondaryShadowDrawable(R.drawable.shadow);    
  60.         //设置右边(二级)侧滑菜单    
  61.         menu.setSecondaryMenu(R.layout.right_menu_frame);    
  62.         Fragment rightMenuFragment = new MenuRightFragment();    
  63.         getSupportFragmentManager().beginTransaction()    
  64.                 .replace(R.id.id_right_menu_frame, rightMenuFragment).commit();    
  65.     }    
  66.     public void showLeftMenu(View view)   {    
  67.         getSlidingMenu().showMenu();    
  68.     }    
  69.     public void showRightMenu(View view)  {    
  70.         getSlidingMenu().showSecondaryMenu();    
  71.     }    
  72. }    


MainActivity继承的是SlidingFragmentActivity ,在Activity中FragmentPagerAdapter和viewPager作为主布局,然后分别初始化SlidingMenu的两边的菜单。
相关文章
|
3月前
|
物联网 区块链 vr&ar
未来已来:探索区块链、物联网与虚拟现实技术的融合与应用安卓与iOS开发中的跨平台框架选择
【8月更文挑战第30天】在科技的巨轮下,新技术不断涌现,引领着社会进步。本文将聚焦于当前最前沿的技术——区块链、物联网和虚拟现实,探讨它们各自的发展趋势及其在未来可能的应用场景。我们将从这些技术的基本定义出发,逐步深入到它们的相互作用和集成应用,最后展望它们如何共同塑造一个全新的数字生态系统。
|
4月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台框架解析
在移动应用开发的广阔舞台上,安卓和iOS一直是两大主角。随着技术的进步,开发者们渴望能有一种方式,让他们的应用能同时在这两大平台上运行,而不必为每一个平台单独编写代码。这就是跨平台框架诞生的背景。本文将探讨几种流行的跨平台框架,包括它们的优势、局限性,以及如何根据项目需求选择合适的框架。我们将从技术的深度和广度两个维度,对这些框架进行比较分析,旨在为开发者提供一个清晰的指南,帮助他们在安卓和iOS的开发旅程中,做出明智的选择。
|
3天前
|
算法 JavaScript Android开发
|
13天前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
45 1
|
2月前
|
前端开发 Java 数据库
💡Android开发者必看!掌握这5大框架,轻松打造爆款应用不是梦!🏆
在Android开发领域,框架犹如指路明灯,助力开发者加速应用开发并提升品质。本文将介绍五大必备框架:Retrofit简化网络请求,Room优化数据库访问,MVVM架构提高代码可维护性,Dagger 2管理依赖注入,Jetpack Compose革新UI开发。掌握这些框架,助你在竞争激烈的市场中脱颖而出,打造爆款应用。
307 3
|
2月前
|
编译器 Android开发 开发者
带你了解Android Jetpack库中的依赖注入框架:Hilt
本文介绍了Hilt,这是Google为Android开发的依赖注入框架,基于Dagger构建,旨在简化依赖注入过程。Hilt通过自动化的组件和注解减少了DI的样板代码,提高了应用的可测试性和可维护性。文章详细讲解了Hilt的主要概念、基本用法及原理,帮助开发者更好地理解和应用Hilt。
71 8
|
3月前
|
设计模式 Java Android开发
探索安卓应用开发:从新手到专家的旅程探索iOS开发中的SwiftUI框架
【8月更文挑战第29天】本文旨在通过一个易于理解的旅程比喻,带领读者深入探讨安卓应用开发的各个方面。我们将从基础概念入手,逐步过渡到高级技术,最后讨论如何维护和推广你的应用。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的代码示例。让我们一起开始这段激动人心的旅程吧!
|
3月前
|
Android开发
基于Amlogic 安卓9.0, 驱动简说(三):使用misc框架,让驱动更简单
如何使用Amlogic T972安卓9.0系统上的misc框架来简化驱动程序开发,通过misc框架自动分配设备号并创建设备文件,从而减少代码量并避免设备号冲突。
38 0
基于Amlogic 安卓9.0, 驱动简说(三):使用misc框架,让驱动更简单
|
3月前
|
存储 前端开发 Java
Android MVVM框架详解与应用
在Android开发中,随着应用复杂度的增加,如何有效地组织和管理代码成为了一个重要的问题。MVVM(Model-View-ViewModel)架构模式因其清晰的结构和高效的开发效率,逐渐成为Android开发者们青睐的架构模式之一。本文将详细介绍Android MVVM框架的基本概念、优势、实现流程以及一个实际案例。
|
4月前
|
前端开发 安全 数据库
💡Android开发者必看!掌握这5大框架,轻松打造爆款应用不是梦!🏆
【7月更文挑战第28天】在Android开发领域,五大框架如星辰般指引方向,加速进程,提升应用品质。1. **Retrofit**:Square公司的类型安全HTTP客户端,使网络请求变得优雅简洁。2. **Room**:Google推荐的ORM库,简化SQLite数据库访问。3. **MVVM**:一种架构模式,提高代码可维护性和扩展性。4. **Dagger 2**:依赖注入框架,减少样板代码,以声明方式管理依赖。5. **Jetpack Compose**:全新的UI工具包,采用声明式UI编程,让UI开发更直观高效。掌握这些框架,能有效应对Android开发挑战,助力打造爆款应用。
245 0