`
djun100
  • 浏览: 179665 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Android中使用fragment+slidingmenu实现侧滑

 
阅读更多

罪过啊,罪过,很久都没更新博客了,今天刚好有时间,然后现在时下流行很多应用都有侧滑功能,不用说,这就是今天的主题,fragment这也是本人第一次使用这个东西,原来一直在2.3的环境下开发,表示相当压抑,一直没时间研究新特征,表示很无奈,不过以后会有新的东西奉献给大家,在大家继续之前,如果有不会使用的fragment的童鞋,先建议看下面一篇文章,里面讲的很详细,所以我这里就不罗嗦了,哈哈

http://blog.csdn.net/aomandeshangxiao/article/details/7671533

下面就开始正餐了,在这以前也参考一些大牛的神笔,比如eoe超版Kris大神,这里也不废话了,先看效果图:

device-2013-06-26-182128

device-2013-06-26-183239

下面就详细分析整个实现过程:

1、 主界面由两个fragment构成:Content+Menu,我们看看Content的代码:

01 public final String tag = this.getClass().getName();
02 public String text = null;
03
04 public ContentFragment(String text) {
05 Log.e(tag, text);
06 this.text = text;
07 }
08
09 @Override
10 public void onCreate(Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 setRetainInstance(true);
13 Log.e(tag, "onCreate:" + text);
14 }
15
16 @Override
17 public View onCreateView(LayoutInflater inflater, ViewGroup container,
18 Bundle savedInstanceState) {
19 Log.e(tag, "onCreateView:" + text);
20 // inflater the layout
21 View view = inflater.inflate(R.layout.content_layout, null);
22 TextView textView = (TextView) view.findViewById(R.id.content_tv);
23 if (!TextUtils.isEmpty(text)) {
24 textView.setText(text);
25 }
26 return view;
27 }

Content 里面只有一个Textview用来显示内容,我需要在Activity里面告诉它需要显示神马。

我们再来看看Menu里面的代码:

01 public final String tag = this.getClass().getName();
02 public ListView menu_lv = null;
03 public MenuAdapter menuAdapter = null;
04 public Context mContext = null;
05
06 public MenuFragment(Context mContext) {
07 this.mContext = mContext;
08 }
09
10 @Override
11 public void onCreate(Bundle savedInstanceState) {
12 // TODO Auto-generated method stub
13 super.onCreate(savedInstanceState);
14 }
15
16 @Override
17 public View onCreateView(LayoutInflater inflater, ViewGroup container,
18 Bundle savedInstanceState) {
19 // TODO Auto-generated method stub
20 View menuView = inflater.inflate(R.layout.menu_layout, null);
21 menu_lv = (ListView) menuView.findViewById(R.id.menu_lv);
22 menuAdapter = new MenuAdapter(mContext);
23 menu_lv.setAdapter(menuAdapter);
24 menu_lv.setOnItemClickListener(itemListener);
25 return menuView;
26 }
27
28 public OnItemClickListener itemListener = new OnItemClickListener() {
29
30 @Override
31 public void onItemClick(AdapterView<?> arg0, View arg1, int position,
32 long arg3) {
33 // TODO Auto-generated method stub
34 ((MainActivity)mContext).getSlidingMenu().toggle();
35 Toast.makeText(mContext, menuAdapter.menuStr[position], Toast.LENGTH_SHORT).show();
36 FragmentTransaction ft = ((MainActivity)mContext).getFragmentManager().beginTransaction();
37 ContentFragment cf = new ContentFragment(menuAdapter.menuStr[position]);
38 ft.replace(R.id.main_rl, cf);
39 ft.commit();
40 }
41 };

这里我有个listview,在listview监听里面我拿到的Main的fragment事物管理,然后处理Content进行显示内容的变更。

下面看看listview 配置的 Adapter代码:

01 public String[] menuStr = { "好友推荐", "关于我", "意见反馈", "版本更新" };
02 public int[] viewId = { R.drawable.recommendfriend, R.drawable.about,
03 R.drawable.suggestion, R.drawable.refurbish };
04 public LayoutInflater inflater = null;
05
06 public MenuAdapter(Context context) {
07 inflater = LayoutInflater.from(context);
08 }
09
10 @Override
11 public int getCount() {
12 // TODO Auto-generated method stub
13 return menuStr.length;
14 }
15
16 @Override
17 public Object getItem(int position) {
18 // TODO Auto-generated method stub
19 return menuStr[position];
20 }
21
22 @Override
23 public long getItemId(int position) {
24 // TODO Auto-generated method stub
25 return position;
26 }
27
28 class Holder {
29 ImageView items_iv;
30 TextView items_tv;
31 }
32
33 @Override
34 public View getView(int position, View convertView, ViewGroup parent) {
35 // TODO Auto-generated method stub
36 Holder holder = null;
37 if (convertView == null) {
38 convertView = inflater.inflate(R.layout.menu_items, null);
39 holder = new Holder();
40 holder.items_iv = (ImageView) convertView
41 .findViewById(R.id.items_iv);
42 holder.items_tv = (TextView) convertView
43 .findViewById(R.id.items_tv);
44 convertView.setTag(holder);
45 } else {
46 holder = (Holder) convertView.getTag();
47 }
48 holder.items_iv.setBackgroundResource(viewId[position]);
49 holder.items_tv.setText(menuStr[position]);
50 return convertView;
51 }
52 //释放
53 public void exit() {
54 menuStr = null;
55 inflater = null;
56 }

这里就是Menu显示的内容。

下面来看看Activity里面代码:

01 public FragmentTransaction fraTra = null;
02 public MenuFragment menuFra = null;
03 public ContentFragment contentFra = null;
04
05 @Override
06 public void onCreate(Bundle savedInstanceState) {
07 super.onCreate(savedInstanceState);
08 setContentView(R.layout.activity_main);
09 setBehindContentView(R.layout.menu_layout); // 设置菜单页
10 fraTra = this.getFragmentManager().beginTransaction();
11 menuFra = new MenuFragment(this);
12 contentFra = new ContentFragment("I'm John");
13 fraTra.replace(R.id.menu_fl, menuFra);
14 fraTra.replace(R.id.main_rl, contentFra);
15 fraTra.commit();
16 //
17 SlidingMenu sm = getSlidingMenu(); //滑动菜单
18 sm.setShadowWidth(15); // 阴影宽度
19 sm.setBehindOffset(300); // 菜单与边框的距离
20 sm.setShadowDrawable(R.drawable.shadow); // 滑动菜单渐变
21 sm.setFadeDegree(0.35f); //色度
22 sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); // 边缘滑动菜单
23 //
24 getActionBar().setDisplayHomeAsUpEnabled(true); //ActionBar(左上角)是否可以点击
25 }
26
27 @Override
28 public boolean onCreateOptionsMenu(Menu menu) {
29 // Inflate the menu; this adds items to the action bar if it is present.
30 getMenuInflater().inflate(R.menu.activity_main, menu);
31 return true;
32 }
33
34 @Override
35 public boolean onOptionsItemSelected(MenuItem item) {
36 switch (item.getItemId()) {
37 case android.R.id.home:
38 //判断是菜单打开还是关闭
39 toggle();
40 return true;
41 }
42 return super.onOptionsItemSelected(item);
43 }

这里主要是Activity对Menu和Content进行了集中处理、设置侧滑菜单的相关属性。

相信大家看到这里都明白了吧。很简单的一个小例子,但是很实用,时间不早了今天就说到这里,有啥疑问,给我留言,谢谢。

差点忘了,附上源码:

http://www.eoeandroid.com/thread-288729-1-1.html

由于gitHub经常访问不了,先暂时放到eoe上面。

分享到:
评论

相关推荐

    slidingmenu+fragment实现侧滑菜单,内带截图

    在给定的标题“slidingmenu+fragment实现侧滑菜单,内带截图”中,我们可以理解这是一个关于如何使用`SlidingMenu`库结合`Fragment`来构建侧滑菜单的教程或示例项目。 1. **SlidingMenu库**:SlidingMenu是一个开源...

    利用ViewPager+Fragment+slidingmenu侧滑组件实现的小demo

    综上所述,这个“利用ViewPager+Fragment+slidingmenu侧滑组件实现的小demo”是一个综合性的Android开发实践,它涵盖了界面组件的集成、用户交互设计以及数据绑定等多个方面,对于理解和掌握Android应用开发有着重要...

    Fragment+slidingmenu+tab页

    在Android应用开发中,"Fragment+slidingmenu+tab页"是一种常见的布局和交互模式,广泛应用于各种新闻、社交和资讯类应用。本系列旨在深入探讨如何高效地整合这三个组件,构建一个功能完善的APP框架。 Fragment是...

    新手 仿QQ Fragment+SlidingMenu+ImageView圆角

    在Android应用开发中,"新手 仿QQ Fragment+SlidingMenu+ImageView圆角"这个标题意味着我们要探讨如何为初学者创建一个类似QQ的应用,其中包括使用Fragment、SlidingMenu以及实现ImageView的圆角效果。这三个技术点...

    Viewpaper+Fragment+EventBus+slidingMenu

    SlidingMenu是一个流行的开源库,用于在Android应用中实现侧滑菜单效果。这种菜单通常隐藏在主界面的左侧或右侧,用户可以通过滑动手势将其滑出。SlidingMenu适用于创建类似Google Maps或Facebook那样的导航模式,...

    Fragment+ViewPager+SlidingMenu组件实现的demo

    在Android开发中,`Fragment`、`ViewPager`和`SlidingMenu`是构建复杂用户界面的常用组件。这个"Fragment+ViewPager+SlidingMenu组件实现的demo"是一个很好的实例,展示了如何有效地组合这三个组件来创建一个功能...

    Fragment+ViewPage+SlidingMenu

    尽管在Android设计指南中推荐使用`DrawerLayout`作为侧滑菜单的标准实现,但在旧项目中,SlidingMenu仍然被广泛使用。SlidingMenu可以与`Fragment`结合,将菜单内容作为一个`Fragment`来管理,这样既方便了内容的...

    Android例子源码tabhost+activity+slidingMenu

    **SlidingMenu**:SlidingMenu是一种侧滑菜单控件,常用于实现类似原生Android系统抽屉效果,让用户从屏幕边缘滑动以展示隐藏的菜单。相比于Android自带的NavigationView,SlidingMenu提供更多的自定义选项和更好的...

    slidingMenu+viewpager+fragment+listView

    在Android应用开发中,"slidingMenu+viewPager+Fragment+listView"是一个常见的组合,用于构建具有侧滑菜单、页面切换、动态内容加载和列表展示功能的复杂用户界面。以下是对这个组合中的各个组件及其相互作用的详细...

    侧滑菜单SlidingMenu+Fragment

    学习并实践这个`SlideMenuDemo`项目,将帮助你掌握如何在Android应用中实现功能完善的侧滑菜单,并理解`Fragment`在构建动态、模块化用户界面中的重要作用。同时,这也为你提供了一个良好的起点,可以在此基础上...

    Android例子源码tabhost+activity+slidingMenu仿新浪微博布局.zip

    在实际应用中,开发者可能会使用第三方库,如`androidx.slidingpanelayout.widget.SlidingPaneLayout`或者`jmolecules/sliding-menu`等来实现SlidingMenu功能。这些库提供了预设的动画效果和易于定制的API,使得集成...

    安卓viewpager+slidingmenu+Fragment镶嵌写出的文件管理器项目

    总结来说,这个项目展示了如何在Android中利用ViewPager、SlidingMenu和Fragment构建一个具有侧滑菜单和多视图切换的文件管理器,同时借助SwipeListView增强用户交互,实现了丰富的文件操作功能。通过阅读和理解这个...

    Android应用源码之SlidingMenu实现侧滑栏菜单.zip

    本篇将详细讲解如何利用SlidingMenu库在Android应用中实现侧滑栏菜单,并探讨其源码背后的机制。 首先,SlidingMenu库的核心思想是通过叠加两个布局来实现侧滑效果。一个是主内容视图,另一个是隐藏的侧滑菜单。当...

    安卓Android源码——SlidingMenu实现侧滑栏菜单.zip

    本资源“安卓Android源码——SlidingMenu实现侧滑栏菜单.zip”提供了一种使用SlidingMenu库来构建侧滑栏菜单的具体示例,可以帮助开发者更深入地理解和应用这个库。 首先,SlidingMenu是一个开源的Android库,由...

    通过SlidingMenu+Viewpager实现当前最流行的侧滑

    通过SlidingMenu+Viewpager实现当前最...通过SlidingMenu库与Fragment来实现当前最为流行的侧滑模式。其实涉及到的知识点有: 1.SlidingMenu 2.Fragment 通过layout构建一个Fragment 通过preference 来构建Fragment

    SlidingMenu+ViewPager实现侧滑菜单效果

    在Android应用开发中,侧滑菜单(也称为抽屉式导航)是一种常见的设计模式,它允许用户通过从屏幕边缘向内滑动来显示隐藏的菜单选项。SlidingMenu库是实现这种效果的一个流行选择,而ViewPager则常用于实现页面间的...

    Android应用源码之SlidingMenu实现侧滑栏菜单-IT计算机-毕业设计.zip

    本项目是针对Android平台的一个源码实现,主要展示了如何使用SlidingMenu库来构建一个具有侧滑功能的应用。这个项目对于毕业设计和Android开发初学者来说,是一个很好的学习资源。 首先,让我们深入了解一下...

    安卓Android源码——SlidingMenu实现侧滑栏菜单.rar

    本资源“安卓Android源码——SlidingMenu实现侧滑栏菜单.rar”提供了一个具体实现这一功能的源代码示例,这对于开发者理解和学习如何在自己的应用中集成类似功能非常有帮助。 首先,我们来讨论一下SlidingMenu库。...

    SlidingMenu实现侧滑栏菜单.zip

    在这个例子中,可能使用了开源库`SlidingMenu`,这是一个由Jeremy Feinstein开发的Android库,它为Android应用添加了类似Google Play、Twitter等应用的侧滑菜单效果。开发者可以通过集成这个库快速实现侧滑菜单功能...

Global site tag (gtag.js) - Google Analytics