原博客出处
SlidingMenu(侧滑菜单)—通俗理解就是QQ侧滑效果的一个东西
官方点的解释:
GitHub上的一款开源项目,是一个library(库)的存在, 注意:可能是导入连个库,也可能是只有一个库
极客Ime讲解的就是导入两个库,
而本文只需要导入一个库就可以了! 而且两者代码差距还是很大不一样的
(可以理解SlidingMenu是一个库文件,人为设计的一套UI库文件,风格不同吧!)
我们只需要会一种就可以了,以后遇类型的一看就懂了
正题:
如何导入库文件暂时略过
1.理解SidingMenu的四种用法原理
- 1 .在Activity中实现SildingMenu构造方法实现
a.实现构造方法
b.设置侧滑的页面和属性,
c.添加到页面中
- 2 .继承SidingActivity实现,
a.继承类
b.设置滑动页面
c得到系统的滑动页面直接设置
- 3. 把SidingFrame当做一个xml控件来看
略过 - 4. 继承 SlidingFragmentActivity来实现(左右滑动)
核心代码的原理也就是:
a 把主页面左右两边设置为 一个只含有Fragment(碎片控件)的Activity.
这时候页面还是空碎片,无数据
b 然后用自定义的碎片代码,替换这个Fragment(碎片控件),
这时候就有具体的页面数据了
c 点击的效果,出侧滑是,提供的点击左右出现 的一个点击事件,
全中文注解代码部分:
1.这是直接在Activity中实现SlidingMenu构造方法
SlidingMenu menu=new SlidingMenu(this); //初始化侧滑控件
menu.setMode(SlidingMenu.LEFT); //设置滑动方向:左滑
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); //设置触摸模式: 滑动任何位置都能打开
menu.setShadowWidthRes(R.dimen.shadow_width); //设置阴影宽度: 资源文件ID数字
menu.setShadowDrawable(R.drawable.shadow); //设置阴影资源: 资源xml文件
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); //设置滑动偏移量: 资源文件ID数字
menu.setFadeDegree(0.35f); //设置渐入渐出的值:
menu.attachToActivity(MainActivity.this, SlidingMenu.SLIDING_CONTENT);//滑动菜单添加进所有Activity中
menu.setMenu(R.layout.activity_ce1); //设置侧滑页面的页面
2.直接继承SlidingActivity的方式
public class MainActivity extends SlidingActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setBehindContentView(R.layout.activity_main2); //设置侧滑Activity
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); //特效值
}
}
4.这种可能最实用一点,配合碎片用
private void initRightMenu(){
/*【左侧滑】*/new MenuLeftFragment()是左碎片代码
setBehindContentView(R.layout.left_menu_frame); /*设置侧滑页面(默认左)*/
getSupportFragmentManager().beginTransaction() /*碎片管理器,设置碎片,并提交事务(左)*/
.replace(R.id.id_left_menu_frame, new MenuLeftFragment()).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); /*特效值*/
/*【右侧滑】*/(new MenuRightFragment() 意思是构造的右碎片代码)
menu.setSecondaryShadowDrawable(R.drawable.shadow); /*设置阴影资源(右)*/
menu.setSecondaryMenu(R.layout.right_menu_frame); /*设置侧滑页面(右)(二级菜单)*/
getSupportFragmentManager().beginTransaction() /*碎片管理器,设置碎片,并提交事务(右)*/
.replace(R.id.id_right_menu_frame, new MenuRightFragment()).commit();
}
/*左侧滑点击事件*/
public void showLeftMenu(View view)
{
getSlidingMenu().showMenu();
}
/*右侧滑点击事件*/
public void showRightMenu(View view)
{
getSlidingMenu().showSecondaryMenu();
}
}
碎片中替换的是页面代码,不是很重要了,贴不贴无所谓了,反正是一个碎片就可以了,
**理解:
无妨理解为偷梁换柱的含义,提供碎片当左右滑动菜单,
而又提供碎片替换碎片**