Viewpager+Fragment+RadioGroup 快速打造应用的布局
刚入坑安卓两个月,想记录自己的学习历程,不喜欢勿喷 -_-
预览
一,主界面布局(viewpager+radioGroup),状态栏放在fragment中处理
viewpager
<android.support.v4.view.ViewPager android:id="@+id/activity_viewpager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/>
Radiogroup
<RadioGroup android:id="@+id/radiogroup_mainlayout" android:layout_width="match_parent" android:layout_height="40dp" android:orientation="horizontal"> <RadioButton android:id="@+id/radbutton_huihua" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:background="@drawable/main_ba_selecor" android:button="@null" android:gravity="center" android:text="会话" android:textColor="@color/main_bottom_textcolor_selector" /> <RadioButton android:id="@+id/radbutton_lianxiren" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:background="@drawable/main_ba_selecor" android:button="@null" android:gravity="center" android:text="联系人" android:textColor="@color/main_bottom_textcolor_selector" /> <RadioButton android:id="@+id/radbutton_function" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:background="@drawable/main_ba_selecor" android:button="@null" android:gravity="center" android:text="功能" android:textColor="@color/main_bottom_textcolor_selector" /> </RadioGroup>
drawble文件
背景
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@android:color/holo_blue_bright" android:state_checked="true"></item> <item android:drawable="@android:color/holo_blue_dark" android:state_checked="false"></item> </selector>
字体颜色
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@android:color/white" android:state_checked="true"></item> <item android:color="@android:color/black" android:state_checked="false"></item> </selector>
二,主activity逻辑处理
1,获取对象(可以使用一个开源框架butterknife快速获取对象
api 'com.jakewharton:butterknife:7.0.1'
private ViewPager vp; private FragmentManager fm; private FragmentStatePagerAdapter fragmentStatePagerAdapter; private List<Fragment> fragments; private RadioButton radioButton1,radioButton2,radioButton3; private Fragment huihuaFragment,lianxirenFragment,functionfragment; private RadioGroup radioGroup;
radioButton1=findViewById(R.id.radbutton_huihua); radioButton2=findViewById(R.id.radbutton_lianxiren); radioButton3=findViewById(R.id.radbutton_function); radioGroup=findViewById(R.id.radiogroup_mainlayout); vp=(ViewPager) findViewById(R.id.activity_viewpager); fm=getSupportFragmentManager(); fragments=new ArrayList<Fragment>(); huihuaFragment=new huihuafragment(); lianxirenFragment=new lianxirenFragment(); functionfragment=new functionfragment(); fragments.add(huihuaFragment); fragments.add(lianxirenFragment); fragments.add(functionfragment);
vp.setOffscreenPageLimit(3);//vp设置页数为3 vp.setCurrentItem(0);//vp默认设置第一屏
2,为viewpager设置适配器fragmentstatepagerAdapter(获得fragment)
fragmentStatePagerAdapter=new FragmentStatePagerAdapter(fm) { @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return fragments.size(); } }; vp.setAdapter(fragmentStatePagerAdapter);
3,设置监听
radioGroup监听:选择改变后的监听,默认设置进入界面选择第一个
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup radioGroup, int i) { switch (i){ case R.id.radbutton_huihua: vp.setCurrentItem(0); break; case R.id.radbutton_lianxiren: vp.setCurrentItem(1); break; case R.id.radbutton_function: vp.setCurrentItem(2); break; } } }); radioGroup.check(R.id.radbutton_huihua);
viewpager设置监听:页面滑动后的RadioGroup的改变
vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { switch (position){ case 0:radioGroup.check(R.id.radbutton_huihua); break; case 1:radioGroup.check(R.id.radbutton_lianxiren); break; case 2: radioGroup.check(R.id.radbutton_function); break;} } @Override public void onPageScrollStateChanged(int state) { } });
因为界面全在fragment中 所以并没有预览的效果, Activity中的fragment也可以用viewpager嵌套fragment,做法也是这种流程