Android之SlideMenu实例Demo
年末加班基本上一周都没什么时候回家写代码,回到家就想睡觉,周末难得有时间写个博客,上次写了一篇关于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中的图片:
作者:FlyElephant
出处:http://www.cnblogs.com/xiaofeixiang
说明:博客经个人辛苦努力所得,如有转载会特别申明,博客不求技惊四座,但求与有缘人分享个人学习知识,生活学习提高之用,博客所有权归本人和博客园所有,如有转载请在显著位置给出博文链接和作者姓名,否则本人将付诸法律。
出处:http://www.cnblogs.com/xiaofeixiang
说明:博客经个人辛苦努力所得,如有转载会特别申明,博客不求技惊四座,但求与有缘人分享个人学习知识,生活学习提高之用,博客所有权归本人和博客园所有,如有转载请在显著位置给出博文链接和作者姓名,否则本人将付诸法律。
标签:
Android
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述