Android开发 侧边滑动菜单栏SlidingMenu结合Fragment

时间:2022-06-04 20:19:47

SlidingMenu是一个开源项目, https://github.com/jfeinstein10/SlidingMenu 。功能是创建侧边滑动菜单栏,效果类似人人Android客户端,可点击按钮或是在屏幕上划动来展开,收缩侧边的菜单。下面是Demo效果图:
Android开发 侧边滑动菜单栏SlidingMenu结合Fragment
简单介绍一下:整个demo由三个Fragment,一个Activity组成,菜单一个Fragment,包含两个按钮,在内容区域切换显示FragmentA和FragmentB.
项目用了AndroidAnnotations框架。
MainActivity:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package com.pocketdigi.slidingmenudemo;
 
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
 
import com.googlecode.androidannotations.annotations.AfterViews;
import com.googlecode.androidannotations.annotations.EActivity;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.pocketdigi.fragment.FragmentA_;
import com.pocketdigi.fragment.FragmentB_;
import com.pocketdigi.fragment.MenuFragment_;
 
 
@EActivity(R.layout.layout_content)
public class MainActivity extends FragmentActivity {
Fragment fragmentA, fragmentB, menuFragment;
SlidingMenu menu;
 
@AfterViews
public void afterViews() {
//添加左侧菜单
menuFragment = new MenuFragment_();
menu = new SlidingMenu(this);
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
menu.setShadowDrawable(R.drawable.shadow);
menu.setShadowWidthRes(R.dimen.shadow_width);
//设置拉出菜单后,上层内容留下的宽度,即这个宽度+菜单宽度=屏幕宽度
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
//设置隐藏或显示菜单时,菜单渐变值,0,不变,1黑色,值为0-1
menu.setFadeDegree(0f);
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
menu.setMenu(R.layout.layout_menu);
 
getSupportFragmentManager().beginTransaction()
.replace(R.id.layout_menu, menuFragment).commit();
 
//显示FragmentA
showFragmentA();
}
 
/**
* 捕捉返回键,如果当前显示菜单,刚隐藏
*/
@Override
public void onBackPressed() {
if (menu.isMenuShowing()) {
menu.showContent();
} else {
super.onBackPressed();
}
}
 
public void showFragmentA()
{
if(fragmentA==null)
{
fragmentA = new FragmentA_();
}
if(!fragmentA.isVisible())
{
getSupportFragmentManager().beginTransaction()
.replace(R.id.layout_content, fragmentA).commit();
}
menu.showContent(true);
}
 
public void showFragmentB()
{
if(fragmentB==null)
{
fragmentB = new FragmentB_();
}
if(!fragmentB.isVisible())
{
getSupportFragmentManager().beginTransaction()
.replace(R.id.layout_content, fragmentB).commit();
}
menu.showContent(true);
}
 
 
}

MenuFragment.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.pocketdigi.fragment;
 
import android.support.v4.app.Fragment;
import android.widget.Button;
 
import com.googlecode.androidannotations.annotations.AfterViews;
import com.googlecode.androidannotations.annotations.Click;
import com.googlecode.androidannotations.annotations.EFragment;
import com.googlecode.androidannotations.annotations.ViewById;
import com.pocketdigi.slidingmenudemo.MainActivity;
import com.pocketdigi.slidingmenudemo.R;
 
@EFragment(R.layout.fragment_menu)
public class MenuFragment extends Fragment {
@ViewById
Button btn_fragmentA,btn_fragmentB;
MainActivity mainActivity;
 
@AfterViews
public void afterViews()
{
mainActivity=(MainActivity)getActivity();
}
 
@Click
public void btn_fragmentA()
{
mainActivity.showFragmentA();
}
@Click
public void btn_fragmentB()
{
mainActivity.showFragmentB();
}
}