Android 学习笔记之AndBase框架学习(七) SlidingMenu滑动菜单的实现
PS:努力的往前飞..再累也无所谓..
学习内容:
1.使用SlidingMenu实现滑动菜单..
SlidingMenu滑动菜单..滑动菜单在绝大多数app中也是存在的..非常的实用..Github有位牛人将这个东西书写成了一个简单的框架..我们只需要通过引用相关的资源就能够完成一个滑动菜单的实现..有了这一层的基础..那么滑动菜单就很容易实现了..就拿我们最为熟悉的QQ来说吧..当我们进行滑动操作的时候..会有一个新的View去覆盖原本的View..我们可以通过触发新的视图上的控件来执行其他的操作...
SlidingMenu的实现有很多种方式..个人感觉最实用的方式还是使用继承SlidingFragment的方式来实现..这样我们可以添加更多的Fragment来展现一个视图..首先使用最简单的方式实现一个滑动后在左侧出现一个滑动视图...
1.使用最基本的方式实现SlidingMenu
通过使用创建SlidingMenu对象..然后对其进行相关参数的设置..将这个滑动菜单再添加到相关联的Activity当中就可以完成一个滑动菜单的创建了...
- package com.darker;
- 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);
- 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);
- // 把滑动菜单添加进所有的Activity中,可选值SLIDING_CONTENT , SLIDING_WINDOW
- menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
- // 为侧滑菜单设置布局
- menu.setMenu(R.layout.leftmenu);
- }
- }
这里是通过直接对对象进行创建,然后设置相关的属性..从而构造一个滑动菜单..我们同样可以在布局文件当中去写一个SlidingMenu..然后通过获取ID的方式去指定样式..同样可以创建一个滑动菜单...布局的方式采用这种方式..那么这块的布局就会去调用com.jeremyfeinstein.slidingmenu.lib.SlidingMenu去创建一个SlidingMenu..
- <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">
- </com.jeremyfeinstein.slidingmenu.lib.SlidingMenu>
这样创建出来的SlidingMenu会按照xml指定的大小和位置出现..动态布局其实和这样的静态布局其实区别并不是非常的大...动态则需要我们手动去创建..通过建立对象的方式..而静态则是调用xml文件的方式..最后归根结底都去调用SlidingMenu的构造函数去创建一个滑动菜单...
- package com.Darker;
- 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();
- }
- });
- }
- }
2.使用另外一种方式去创建一个SlidingMenu...
第二种方式则是采用 extends SlidingFragmentActivity的方式去实现一个滑动菜单..它extends FragmentActivity..说到这里就不得不说一下Fragment了..这个在Android 3.0 就被正式引入的新概念..但是在Android 4.0才开始正式启用..
Fragment被称为碎片管理,这个名字给我感觉和它的作用到底有毛关系我还真就不是非常的清楚..还是说一下它的具体功能吧..Fragment其实是一个轻量级的Acticity..因为app都是采用多Activity进行管理的..因此当界面众多的时候..我们需要建立多个Activity..Activity通过Intent去完成数据信息的传递和交互过程..但是多个Activity就会导致一个问题的出现..在对应用软件进行相关维护的时候,由于Activity众多..导致可维护性也比较差..众多的Activity会导致AndroidManifest配置文件非常的难读..因此这里就引入了Fragment这个概念.并且它内部封装的方法可以直接拿到inflater..这样我们可以直接去inflate布局..
Fragment的使用可以定义在xml布局文件当中..
- <fragment
- android:id="@+id/fragment"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"/>
以这样的方式在xml文件内部定义fragment,然后在主函数内部通过获取ID的方式,然后对fragment进行设置也是可以的..不过我个人感觉..fragment通过动态的创建更加的好用..一个简单的fragment的定义方式..
- package com.Darker;
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- public class MainTab01 extends Fragment {
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- return inflater.inflate(R.layout.main_tab_01, container, false);
- }
- }
这样直接创建一个Fragment子类..通过继承的方式..这样就能够继承内部的大部分属性..onCreateView这个方法是个非常常用的方法..其实就是拿到当前Activity的inflater然后直接在View上加载一个新的布局..这样就可以直接在Activity添加fragment...多说无益..来一段代码...
- package com.Darker;
- import java.util.ArrayList;
- import java.util.List;
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.support.v4.app.FragmentPagerAdapter;
- import android.support.v4.view.ViewPager;
- import android.view.View;
- import android.view.Window;
- import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
- import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;
- public class MainActivity extends SlidingFragmentActivity {
- private ViewPager mViewPager; //ViewPager用于保存多个View..以多页的方式进行保存..
- private FragmentPagerAdapter mAdapter; //Fragment适配器..
- private List<Fragment> mFragments = new ArrayList<Fragment>(); //定义一个List..用来保存Fragment..
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- this.requestWindowFeature(Window.FEATURE_NO_TITLE);
- setContentView(R.layout.activity_main);
- // 初始化SlideMenu
- initRightMenu();
- // 初始化ViewPager
- initViewPager();
- }
- private void initViewPager() {
- mViewPager = (ViewPager) findViewById(R.id.id_viewpager); //获取ViewPager..
- /**
- * 自定义了三个轻量级Activity..也就是Fragment..
- * */
- MainTab01 tab01 = new MainTab01();
- MainTab02 tab02 = new MainTab02();
- MainTab03 tab03 = new MainTab03();
- //将三个Fragment保存在List中..
- mFragments.add(tab01);
- mFragments.add(tab02);
- mFragments.add(tab03);
- /**
- * 初始化Adapter..
- */
- mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
- @Override
- public int getCount() {
- return mFragments.size(); //返回Fragment的数量..
- }
- @Override
- public Fragment getItem(int arg0) {
- return mFragments.get(arg0); //获取Fragment子选项..
- }
- };
- mViewPager.setAdapter(mAdapter);
- }
- //这里自定义了两个滑动菜单...
- private void initRightMenu() {
- Fragment leftMenuFragment = new MenuLeftFragment(); // 左侧的视图View..
- setBehindContentView(R.layout.left_menu_frame); //设置需要被覆盖的布局..
- /**
- * 首先获取碎片管理权限..
- * 由于布局之间的覆盖是一个事务.因此需要将事物设置为开始状态..
- * 同时调用replace方法来设置布局之间的相互替代...
- * 最后将事物进行提交..
- * */
- getSupportFragmentManager().beginTransaction()
- .replace(R.id.id_left_menu_frame, leftMenuFragment).commit();
- SlidingMenu menu = getSlidingMenu(); //定义一个滑动菜单..
- menu.setMode(SlidingMenu.LEFT_RIGHT);
- // 设置触摸屏幕的模式
- menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
- menu.setShadowWidthRes(R.dimen.shadow_width);
- menu.setShadowDrawable(R.drawable.shadow);
- // 设置滑动菜单视图的宽度
- menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
- // 设置渐入渐出效果的值
- menu.setFadeDegree(0.35f);
- menu.setSecondaryShadowDrawable(R.drawable.shadow);
- // 设置了一个(二级)侧滑菜单
- menu.setSecondaryMenu(R.layout.right_menu_frame);
- Fragment rightMenuFragment = new MenuRightFragment();
- getSupportFragmentManager().beginTransaction()
- .replace(R.id.id_right_menu_frame, rightMenuFragment).commit();
- }
- //显示当前滑动菜单的左侧子菜单..
- public void showLeftMenu(View view) {
- getSlidingMenu().showMenu();
- }
- //显示当前滑动菜单的右侧子菜单..
- public void showRightMenu(View view) {
- getSlidingMenu().showSecondaryMenu();
- }
- }
这里我们可以看到通过extends SlidingFragmentActivity 来实现的..并且这里使用了一个ViewPager..用来保存多个界面.从而实现滑动..并且在这里定义了两个滑动菜单..这两个滑动菜单通过人为在屏幕的最左右侧进行滑动来完成触发..通过滑动..那么滑动的子菜单也会得到展示..我们同样可以操作子菜单来完成更多的操作..这里并不是因为继承了当前Activity继承了SlidingFragmentActivity才实现的左右菜单一起进行设置..通过继承普通的Activity也是能够实现的...这里不要走入误区..
继承了SlidingFragmentActivity的原因是我希望当前的主Activity能够添加fragment的形式来完成滑动...
还需要说的一点就是ViewPager也是需要设置适配器的..这里使用了Android系统自带的FragmentPageAdapter..其实也是通过继承了PagerAdapter来实现的..我们只需要重写一个抽象方法就可以了..总之实现的过程是非常的简单的...
最后附加上一个源码提供个大家:http://files.cnblogs.com/files/RGogoing/zhy_slidingmenu_demo.rar (源代码不是本人写的..这个源代码主要是针对如何使用SlidingMenu..)
Android 学习笔记之AndBase框架学习(七) SlidingMenu滑动菜单的实现的更多相关文章
- Android 学习笔记之AndBase框架学习(六) PullToRefrech 下拉刷新的实现
PS:Struggle for a better future 学习内容: 1.PullToRefrech下拉刷新的实现... 不得不说AndBase这个开源框架确实是非常的强大..把大部分的东西 ...
- Android 学习笔记之AndBase框架学习(五) 数据库ORM..注解,数据库对象映射...
PS:好久没写博客了... 学习内容: 1.DAO介绍,通用DAO的简单调度过程.. 2.数据库映射关系... 3.使用泛型+反射+注解封装通用DAO.. 4.使用AndBase框架实现对DAO的调用 ...
- Android 学习笔记之AndBase框架学习(三) 使用封装好的函数完成Http请求..
PS:踏踏实实走好每一步... 学习内容: 1.使用AndBase框架实现无参Http Get请求... 2.使用AndBase框架实现有参Http Post请求... 3.使用AndBase框架实现 ...
- Android 学习笔记之AndBase框架学习(二) 使用封装好的进度框,Toast框,弹出框,确认框...
PS:渐渐明白,在实验室呆三年都不如在企业呆一年... 学习内容: 1.使用AbActivity内部封装的方法实现进度框,Toast框,弹出框,确认框... AndBase中AbActivity封 ...
- Android 学习笔记之AndBase框架学习(一) 实现多功能标题栏
PS:Volley框架终于通过看源码的方式完成了所有的学习..开始学习AndBase...AndBase的源码实在是多的离谱...因此就不对所有的源码进行分析了... 学习内容: 1.使用AndBas ...
- Android 学习笔记之AndBase框架学习(四) 使用封装好的函数实现单,多线程任务
PS:Force Is Meaningless Without Skill 学习内容: 1.使用AndBase实现单线程任务... 2.使用AndBase实现多线程任务... AndBase内部封 ...
- Hadoop学习笔记—18.Sqoop框架学习
一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加 ...
- Hadoop学习笔记—15.HBase框架学习(基础知识篇)
HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase是一个开源的,分布式的,多版本的,面向列的存储模型,它存储的是 ...
- Hadoop学习笔记—15.HBase框架学习(基础实践篇)
一.HBase的安装配置 1.1 伪分布模式安装 伪分布模式安装即在一台计算机上部署HBase的各个角色,HMaster.HRegionServer以及ZooKeeper都在一台计算机上来模拟. 首先 ...
随机推荐
- Asp.Net实现FORM认证的一些使用技巧(转)
最近因为项目代码重构需要重新整理用户登录和权限控制的部分,现有的代码大体是参照了.NET的FORM认证,并结合了PORTAL KITS的登录控制,代码比较啰嗦,可维护性比较差.于是有了以下的几个需求( ...
- 奇怪吸引子---Russler
奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...
- jackson 实体转json 为NULL或者为空不参加序列化
1.实体上 @JsonInclude(Include.NON_NULL) //将该标记放在属性上,如果该属性为NULL则不参与序列化 //如果放在类上边,那对这个类的全部属性起作用 //Include ...
- [Scheme]一个Scheme的Metacircular evaluator
这个解释器可以用来跑前面两篇文章的例子,所以一并扔出来,三部曲哈哈. Lisp内置的S-expression相当于解析好的语法树,而借助quasiquote和unquote又很容易进行语法树层面的变换 ...
- android studio 中查找代码中的硬编码
在Android Studio中同时按下Ctrl + Shift+ F 或者其他自定义的快捷键,打开全局搜索,在全局搜索中输入 ^((?!(\*|//)).)+[\u4e00-\u9fa5] 并打勾 ...
- 配置算法(第4版)的Java编译环境
1. 下载 1.1 JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html选择“Windows x64 180.5 ...
- grails 私有库相关设置
针对grails的私有库的设置,设置USER_HOME/settings.groovy如下: grails.dependency.cache.dir = "c:/m2_repositorie ...
- Visual Studio快捷键 [VS2008/VS2005]快捷键
VS系统通用快捷键: 1.自动排版(类似VC6中的Alt+F8) 编辑.格式化选定内容 Ctrl + K,Ctrl + F 根据周围的代码行,正确缩进选定的代码行. 2.注释与去掉注释功能. 编辑.注 ...
- 转 如何理解 重要性采样(importance sampling)
分类: 我叫学术帖2011-03-25 13:22 3232人阅读 评论(4) 收藏 举报 图形 重要性采样是非常有意 思的一个方法.我们首先需要明确,这个方法是基于采样的,也就是基于所谓的蒙特卡洛法 ...
- VSFTPD添加用户
VSFTPD的安装网上有很多教程这里就不多说了,这里主要是针对做主机空间服务的朋友在安装好vsftpd后如何为用户增加ftp账号 先来看一看我们一般在*inux系统下面如何增加用户的 #adduser ...