android 菜单导航 (Fragment + RadioGroup)
2013-12-31 19:11
239 查看
网上有很多讲利用Fragment + RadioGroup,actionbar + viewPager和TabHost做菜单导航和切换的例子。对于第三种现在已经过时了。所以讲讲自己对第一个的理解和经验分享,不过在此也简单说说第二种。
1、actionbar + viewpager
对于这种方式,其实在利用eclipse创建Activity的时候就可以直接让eclipse来为我们做好这样的模板。不过要在创建工程时使要求的最小SDK大于或等于11(也可以在配置文件中修改)
在Navigation type选择:Scrollable tabs + swipe 或者 Fixed Tabs + swipe。
这样就会自动生成所需的菜单导航的结构。这样可以将生成的现有代码和xml布局赋值到自己想要的Activity类中和xml布局文件中。
里面具体的细节又是怎么样的呢?查看生成的代码,用到的类也就ActionBar,ViewPager,FragmentPagerAdapter以及Fragment。
如果想要加载自己的xml布局文件,那么可以将导航菜单和布局文件用两个数组保存。在getItem(int position)中使用(position是从0开始的),并且给Fragment传递布局文件参数就可以了。如果希望每个布局文件中控件拥有像点击、滑动的功能等,自己可以获取相应的引用后进行操作。
2、RadioGroup + Fragment
至于布局文件就很简单了:一个FrameLayout和一个RadioGroup放在LinearLayout中就ok了
而在代码中核心也就这么几句
如果大家对于java swing/awt比较熟悉的话,那么一定知道CardLayout布局,FrameLayout和它是一样的。只能显示一个控件。在写java GUI的时候是放入JPanel,而在写android的时候就可以Fragment。
简单一句话,这样的菜单导航实际上就是在FragmentLayout容器中进行切换而已。不过对于SDK小于11的和大于等于11的代码只是小小不同。
,如果把android和HTML做相似比较的话,那么FrameLayout容器和iframe标签或者Frame布局是不是很像了。在网页中,让一个连接target到某个iframe或者frame中去,而在android中就是一个替换旧的那个。
如果在android中想将菜单放在自己想要的位置(可以是底部,顶部,两边)都可以。只要在xml布局文件中配置就行啦。如果想把菜单设计的漂亮一点,那就好好的对RadioButton美化下吧,多加点样式。
运行结果图:
好了!!!!!!!!!!!
总结下:
不管学什么,我觉得学习新东西的时候,可以将它与自己已经掌握的只是进行类比,特别是设计思想,设计方式,显示型式等等。
另外,不要一味的追求某一种方式 或者 一味依赖别人显示的样式设计,而是要先自己思考,用自己已经学过的知识是否能实现一样的效果,这样才能真正掌握。
总之,能够实现一样的效果,一样的功能,且性能没有受到很大影响的情况下,这样的解决方法就是好方法。
1、actionbar + viewpager
对于这种方式,其实在利用eclipse创建Activity的时候就可以直接让eclipse来为我们做好这样的模板。不过要在创建工程时使要求的最小SDK大于或等于11(也可以在配置文件中修改)
在Navigation type选择:Scrollable tabs + swipe 或者 Fixed Tabs + swipe。
这样就会自动生成所需的菜单导航的结构。这样可以将生成的现有代码和xml布局赋值到自己想要的Activity类中和xml布局文件中。
里面具体的细节又是怎么样的呢?查看生成的代码,用到的类也就ActionBar,ViewPager,FragmentPagerAdapter以及Fragment。
如果想要加载自己的xml布局文件,那么可以将导航菜单和布局文件用两个数组保存。在getItem(int position)中使用(position是从0开始的),并且给Fragment传递布局文件参数就可以了。如果希望每个布局文件中控件拥有像点击、滑动的功能等,自己可以获取相应的引用后进行操作。
2、RadioGroup + Fragment
package com.example.zzz; import android.app.Activity; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; //import android.support.v4.app.Fragment; //import android.support.v4.app.FragmentActivity; public class MainFragment2 extends Activity{ RadioGroup group; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); group = (RadioGroup) findViewById(R.id.group); group.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(RadioGroup group, int checkedId) { click(checkedId); } }); } void click(int id){ ItemFragment item = new ItemFragment(); Bundle bun = new Bundle(); switch (id) { case R.id.one: bun.putInt(ItemFragment.LAYOUT, R.layout.one); break; case R.id.two: bun.putInt(ItemFragment.LAYOUT, R.layout.two); break; default : return; } item.setArguments(bun); getFragmentManager() .beginTransaction() .replace(R.id.content, item) .commit(); /*getSupportFragmentManager() .beginTransaction() .replace(R.id.content, item) .commit();*/ } public static class ItemFragment extends Fragment { static final String LAYOUT = "layout"; int layout = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); layout = getArguments().getInt(LAYOUT); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = null; if(layout == 0){ v = new View(getActivity()); }else{ v = inflater.inflate(layout, container, false); } return v; } } }
至于布局文件就很简单了:一个FrameLayout和一个RadioGroup放在LinearLayout中就ok了
而在代码中核心也就这么几句
getFragmentManager() .beginTransaction() .replace(R.id.content, item) .commit();
如果大家对于java swing/awt比较熟悉的话,那么一定知道CardLayout布局,FrameLayout和它是一样的。只能显示一个控件。在写java GUI的时候是放入JPanel,而在写android的时候就可以Fragment。
简单一句话,这样的菜单导航实际上就是在FragmentLayout容器中进行切换而已。不过对于SDK小于11的和大于等于11的代码只是小小不同。
,如果把android和HTML做相似比较的话,那么FrameLayout容器和iframe标签或者Frame布局是不是很像了。在网页中,让一个连接target到某个iframe或者frame中去,而在android中就是一个替换旧的那个。
如果在android中想将菜单放在自己想要的位置(可以是底部,顶部,两边)都可以。只要在xml布局文件中配置就行啦。如果想把菜单设计的漂亮一点,那就好好的对RadioButton美化下吧,多加点样式。
运行结果图:
好了!!!!!!!!!!!
总结下:
不管学什么,我觉得学习新东西的时候,可以将它与自己已经掌握的只是进行类比,特别是设计思想,设计方式,显示型式等等。
另外,不要一味的追求某一种方式 或者 一味依赖别人显示的样式设计,而是要先自己思考,用自己已经学过的知识是否能实现一样的效果,这样才能真正掌握。
总之,能够实现一样的效果,一样的功能,且性能没有受到很大影响的情况下,这样的解决方法就是好方法。
相关文章推荐
- Android中的RadioGroup+ViewPager+Fragment导航样式实现(续)
- android中的ViewPager+Fragment+RadioGroup导航样式的实现
- Fragment + RadioGroup实现底部导航
- Android ViewPager+RadioGroup+Fragment超高仿微信主界面
- 高仿拉手网底部菜单实现FragmentActivity+Fragment+RadioGroup
- Android进阶之路 - RadioGroup与RadioButton快速实现底部导航
- Android软件架构之RadioGroup + Fragment , TabLayout + ViewPager +Fragment 覆盖市场大部分商业软件架构
- android入门——用RadioGroup实现Fragment的切换
- Android 底部菜单栏(RadioGroup+Fragment)美化
- 如何使用RadioGroup和RadioButton实现FragmentTabHost导航效果?
- 【Android UI】RadioGroup+Fragment实现底部菜单栏
- Android UI-实现底部切换标签之方式二 ──Activity(底部采用radioGroup+rutton)添加5个子fragment
- android应用开发--------------看RadioGroup源代码,写相似单选选项卡的集成控件(如底部导航,tab等等)
- Android之底部導航欄--RadioGroup、TabHost、Fragment
- Android 通过RadioGroup+Fragment实习主页
- 底部菜单实现(二):RadioGroup和fragment
- Android 基本控件的使用四(仿团购底部菜单App)(RadioGroup)
- Android封装好的类似于RadioGroup的底部导航或顶部导航、仿微信底部导航
- Android之底部導航欄--RadioGroup、TabHost、Fragment
- Android 使用ViewPager和RadioGroup配合Fragment实现标签页,可点击按钮切换、滑动切换。