烟台杰瑞教育科技有限公司(Android开发培训部) 版权所有
ViewPage+Fragment实现区域顶部tab滑动切换
一、问题描述 本系列将结合案例应用,陆续向大家介绍一些Android典型界面的设计,首先说说tab导航,导航分为一层和两层(底部区块+区域内头部导航),主要实现方案有RadioGroup+ViewPage+Fragment、Viewpager Indicator、ActionBar Tabs、FragmentTabHost+Fragment等,下面我们先采用RadioGroup+ViewPage+Fragment实现区域头部导航。 如图所示:
------杰瑞教育(www.jerehedu.com ) 专注IT技能培训 打造一流人才服务平台------
烟台杰瑞教育科技有限公司(Android开发培训部) 版权所有
二、案例主要组件 1、先看一下MainActivity布局
android:id=\ android:layout_width=\ android:layout_height=\ android:scrollbars=\ > android:id=\ android:layout_width=\ android:layout_height=\ android:orientation=\
android:layout_width=\ android:layout_height=\ android:layout_weight=\ >
2、MainActivity代码:
public class MainActivity extends FragmentActivity implements OnPageChangeListener{ private ViewPager viewPager; private RadioGroup rgChannel=null; private HorizontalScrollView hvChannel; private PageFragmentAdapter adapter=null;
private List
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
------杰瑞教育(www.jerehedu.com ) 专注IT技能培训 打造一流人才服务平台------
烟台杰瑞教育科技有限公司(Android开发培训部) 版权所有
initView(); }
private void initView(){
rgChannel=(RadioGroup)super.findViewById(R.id.rgChannel); viewPager=(ViewPager)super.findViewById(R.id.vpNewsList);
hvChannel=(HorizontalScrollView)super.findViewById(R.id.hvChannel); rgChannel.setOnCheckedChangeListener(
new RadioGroup.OnCheckedChangeListener() { @Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
viewPager.setCurrentItem(checkedId); } });
viewPager.setOnPageChangeListener(this); initTab();//动态产生RadioButton initViewPager(); rgChannel.check(0); }
private void initTab(){
List RadioButton rb=(RadioButton)LayoutInflater.from(this). inflate(R.layout.tab_rb, null); rb.setId(i); rb.setText(channelList.get(i).getName()); RadioGroup.LayoutParams params=new RadioGroup.LayoutParams(RadioGroup.LayoutParams.WRAP_CONTENT, RadioGroup.LayoutParams.WRAP_CONTENT); rgChannel.addView(rb,params); } } private void initViewPager(){ List bundle.putString(\ bundle.putString(\ frag.setArguments(bundle); //向Fragment传入数据 fragmentList.add(frag); } ------杰瑞教育(www.jerehedu.com ) 专注IT技能培训 打造一流人才服务平台------ 烟台杰瑞教育科技有限公司(Android开发培训部) 版权所有 adapter=new PageFragmentAdapter(super.getSupportFragmentManager(),fragmentList); viewPager.setAdapter(adapter); //viewPager.setOffscreenPageLimit(0); } /** * 滑动ViewPager时调整ScroollView的位置以便显示按钮 * @param idx */ private void setTab(int idx){ RadioButton rb=(RadioButton)rgChannel.getChildAt(idx); rb.setChecked(true); int left=rb.getLeft(); int width=rb.getMeasuredWidth(); DisplayMetrics metrics=new DisplayMetrics(); super.getWindowManager().getDefaultDisplay().getMetrics(metrics); int screenWidth=metrics.widthPixels; int len=left+width/2-screenWidth/2; hvChannel.smoothScrollTo(len, 0);//滑动ScroollView } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int position) { // TODO Auto-generated method stub setTab(position); } } 其中initTab()方法实现向RadioGroup动态添加RadioButton 导航按钮数据来源于ChannelDb private static List selectedChannel.add(new Channel(\头条\ ------杰瑞教育(www.jerehedu.com ) 专注IT技能培训 打造一流人才服务平台------ 烟台杰瑞教育科技有限公司(Android开发培训部) 版权所有 selectedChannel.add(new Channel(\娱乐\ selectedChannel.add(new Channel(\体育\ selectedChannel.add(new Channel(\财经\ selectedChannel.add(new Channel(\热点\ selectedChannel.add(new Channel(\科技\ selectedChannel.add(new Channel(\图片\ selectedChannel.add(new Channel(\汽车\ selectedChannel.add(new Channel(\时尚\ } public static List 导航按钮外观:tab_rb.xml和tab_selector.xml背景选择器(实现选择后带红色下划线效果) android:background=\ android:paddingLeft=\ android:paddingRight=\ android:paddingTop=\ android:paddingBottom=\ android:button=\ /> tab_selector.xml: ------杰瑞教育(www.jerehedu.com ) 专注IT技能培训 打造一流人才服务平台------ 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库ViewPage+Fragment实现区域顶部tab滑动切换(烟台杰瑞教育Android在线全文阅读。
相关推荐: