年末加班基本上一周都没什么时候回家写代码,回到家就想睡觉,周末难得有时间写个博客,上次写了一篇关于SlideMenu开源项目的导入问题,这次主要讲讲使用的问题,SlideMenu应用的广泛程度就不用说了,基本上是App的标配,关于SlideMenu的各种使用方法有很多,网上各种Demo也很多,想来想去还是按照自己本身的实战方式去写写吧,走过的坑希望大家基本上不会遇到,开始正题:
基础布局
写布局文件之前先看下最终的效果图,昨天红色就是滑动出现的区域,右边的图片由左边的事件触发:
activity_main.xml中的布局:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<FrameLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:id=
"@+id/main_frame"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:paddingBottom=
"@dimen/activity_vertical_margin"
android:paddingLeft=
"@dimen/activity_horizontal_margin"
android:paddingRight=
"@dimen/activity_horizontal_margin"
android:paddingTop=
"@dimen/activity_vertical_margin"
tools:context=
"com.example.slidemenu.MainActivity"
>
<ListView
android:id=
"@+id/list_base"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
</ListView>
</FrameLayout>
|
menu_frame.xml中主要是用于右边显示布局,单独写出来一个是为了方便以后的替换:
1
2
3
4
5
6
7
8
|
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<FrameLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:id=
"@+id/menu_frame"
>
</FrameLayout>
|
slide_menu.xml中主要用来显示SlideMenu中的数据,最后通过代码区
1
2
3
4
5
6
7
|
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<ListView xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id=
"@+id/list_slide"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
</ListView>
|
list_item中的布局文件,之后自定义的Adapter会用到:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"horizontal"
>
<ImageView
android:id=
"@+id/list_image"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
/>
</LinearLayout>
|
实例Demo
首先MainActivity导入开源项目包(如果导入有问题可以参考本人的上一篇文章)之后继承SlidingFragmentActivity;
自定义 实例化Slide_Menu.xml的类:
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
|
public
class
MyMenuFragment
extends
Fragment
implements
OnItemClickListener {
private
View view;
private
String[] listArrStrings=
new
String[]{
"鹰"
,
" 鹭"
,
"火烈鸟"
};
@Override
public
void
onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super
.onCreate(savedInstanceState);
}
@Override
public
View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
view=LayoutInflater.from(getActivity()).inflate(R.layout.slide_menu,
null
);
return
view;
}
@Override
public
void
onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super
.onActivityCreated(savedInstanceState);
ListView listView=(ListView) view.findViewById(R.id.list_slide);
listView.setAdapter(
new
ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, listArrStrings));
listView.setOnItemClickListener(
this
);
}
@Override
public
void
onItemClick(AdapterView<?> parent, View view,
int
position,
long
id) {
// TODO Auto-generated method stub
if
(getActivity()
instanceof
MainActivity){
((MainActivity)getActivity()).changeImage(position);
}
}
}
|
onCreate中方法中调用:
1
2
3
4
5
6
7
8
9
10
11
12
|
super
.onCreate(savedInstanceState);
setBehindContentView(R.layout.menu_frame);
setContentView(R.layout.activity_main);
slidingMenu = getSlidingMenu();
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
slidingMenu.setBehindWidth(
80
);
MyMenuFragment menuFragment =
new
MyMenuFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.menu_frame, menuFragment,
"MyMenu"
).commit();
|
MyMenuFragment中如果回调MainActivity调用的方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public
void
changeImage(
int
index){
ListView view=(ListView) findViewById(R.id.list_base);
switch
(index) {
case
0
:
view.setAdapter(
new
MyListAdapter(
this
, R.drawable.eagle));
break
;
case
1
:
view.setAdapter(
new
MyListAdapter(
this
, R.drawable.heron));
break
;
case
2
:
view.setAdapter(
new
MyListAdapter(
this
, R.drawable.flamingo));
break
;
default
:
break
;
}
}
|
最后是自定义的MyListAdapter:
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
|
public
class
MyListAdapter
extends
BaseAdapter{
private
int
resourceID;
private
LayoutInflater inflater;
public
MyListAdapter(Context context,
int
resId){
inflater=LayoutInflater.from(context);
resourceID=resId;
}
@Override
public
int
getCount() {
// TODO Auto-generated method stub
return
3
;
}
@Override
public
Object getItem(
int
position) {
// TODO Auto-generated method stub
return
null
;
}
@Override
public
long
getItemId(
int
position) {
// TODO Auto-generated method stub
return
0
;
}
@Override
public
View getView(
int
position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view=
null
;
if
(convertView==
null
) {
view=inflater.inflate(R.layout.list_item,
null
);
}
else
{
view=convertView;
}
ImageView imageView=(ImageView) view.findViewById(R.id.list_image);
imageView.setImageResource(resourceID);
return
view;
}
}
|
本人只是设置左滑动,其实还是设置右滑动,设置左右滑动通过setSecondaryMenu设置;
最后看下火烈鸟吧,老外还是比较爱护动物的,以上都是开源项目SlideMenu中的图片:
本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4148837.html,如需转载请自行联系原作者