美文网首页
tablayout+fragment+viewpager实现新闻

tablayout+fragment+viewpager实现新闻

作者: 临窗听雨 | 来源:发表于2017-05-07 07:48 被阅读998次

     今天介绍tablayout,tablayout是meterial design设计风格的design包中的控件。

用tablayout结合fragment+viewpager可以实现如下效果:

实现思路:

一、先写XML布局:

一个TabLayout,一个viewpager用线性布局包裹起来

解释下tablayout控件的几个属性的含义:

tabIndicatorColor:底部指示器的颜色

tabTextColor:tab文字的颜色

tabSelectedTextColor:tab选项卡被选中时文字的颜色

tabMode:是否可以滑动

tabGravity:是否占满整个布局或者居中显示

二、MainActivity中的主要代码

//找到控件

tabLayout= (TabLayout) findViewById(R.id.tablayout);

viewPager= (ViewPager) findViewById(R.id.vp);

MyPagerAdapter adapter =newMyPagerAdapter(getSupportFragmentManager());

//tab的标题来自于adapter

tabLayout.setTabsFromPagerAdapter(adapter);

viewPager.addOnPageChangeListener(newTabLayout.TabLayoutOnPageChangeListener(tabLayout));

//tabLayout 和 viewpager关联

tabLayout.addOnTabSelectedListener(newTabLayout.OnTabSelectedListener() {

@Override

public voidonTabSelected(TabLayout.Tab tab) {

    //tab选中时的回调

    viewPager.setCurrentItem(tab.getPosition(),true);

}

@Override

public voidonTabUnselected(TabLayout.Tab tab) {

}

@Override

public voidonTabReselected(TabLayout.Tab tab) {

}

});

viewPager.setAdapter(adapter);

}

classMyPagerAdapterextendsFragmentPagerAdapter{

          publicMyPagerAdapter(FragmentManager fm) {

                   super(fm);

          }

//返回标题

@Override

publicCharSequencegetPageTitle(intposition) {

              return  titles[position];

}

@Override

publicFragmentgetItem(intposition) {

         //返回fragment 带标题

         NewsFragment f =newNewsFragment();

         Bundle bundle =newBundle();

          bundle.putString("title",titles[position]);

          f.setArguments(bundle);

          return f;

}

@Override

public intgetCount() {

      return titles.length;

}

三、fragment代码

publicViewonCreateView(LayoutInflater inflater,

@NullableViewGroup container,@NullableBundle savedInstanceState) {

       Bundle bundle = getArguments();

       String title = bundle.getString("title");

       TextView tv =newTextView(getContext());

       tv.setBackgroundColor(Color.rgb((int)(Math.random()*255),(int)(Math.random()*255),(int)       (Math.random()*255)));

       tv.setText(title);

       return  tv;

}

代码链接:http://pan.baidu.com/s/1gfiQf7P

相关文章

网友评论

      本文标题:tablayout+fragment+viewpager实现新闻

      本文链接:https://www.haomeiwen.com/subject/kznytxtx.html