ViewPager+Fragment+FlycoTabLayout,20行代码实现tabbar(菜单切换效果)
来源:互联网 发布:国际网络购物平台 编辑:程序博客网 时间:2024/05/21 03:59
- 前言
- 编码
- 补充
前言
首先上鸡汤,FlycoTabLayout,一个强大的第三方tabbar库(有各种体位,总有个姿势会让你舒适),点击查看相信你不会后悔。
正如标题所说,只需要不到20行的代码,实现tabbar,菜单选择效果,先上图。
编码
首先创建一个项目
布局,很简单
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tl="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.lpf.fvp.MainActivity" tools:showIn="@layout/activity_main"> <com.flyco.tablayout.SlidingTabLayout android:id="@+id/tablayout" android:layout_width="match_parent" android:layout_height="48dp" android:background="?attr/colorPrimary" tl:tl_divider_color="#1AFFFFFF" tl:tl_divider_padding="13dp" tl:tl_divider_width="1dp" tl:tl_indicator_color="#FFFFFF" tl:tl_indicator_height="1.5dp" tl:tl_indicator_width_equal_title="true" tl:tl_tab_padding="22dp" tl:tl_tab_space_equal="true" tl:tl_textSelectColor="#FFFFFF" tl:tl_textUnselectColor="#66FFFFFF" tl:tl_underline_color="#1AFFFFFF" tl:tl_underline_height="1dp" /> <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
具体控件的使用请查看源项目FlycoTabLayout,有详细的介绍,在此不多说。
创建一个fragment
public class MyFragment extends Fragment { private View view; private String title; private TextView txt; public static MyFragment getInstance(String title) { MyFragment mf = new MyFragment(); mf.title = title; return mf; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_layout, container, false); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initView(); } private void initView() { txt = (TextView) view.findViewById(R.id.msg); txt.setText(title); }}
<?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="vertical"> <TextView android:id="@+id/msg" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" /></LinearLayout>
此处应该不存在任何疑惑,绑定布局,获取一个textview而已。
主界面,MainActivity代码实现
public class MainActivity extends AppCompatActivity { @InjectView(R.id.toolbar) Toolbar toolbar; @InjectView(R.id.tablayout) SlidingTabLayout tablayout; @InjectView(R.id.view_pager) ViewPager viewPager; @InjectView(R.id.fab) FloatingActionButton fab; private ArrayList<MyFragment> mFagments = new ArrayList<>(); private String[] mTitles = {"Tab1", "Tab2", "Tab333344", "Tab4", "Tab5", "Tab6"}; private MyPagerAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.inject(this); setSupportActionBar(toolbar); initView(); } private void initView() { for (String s : mTitles) { mFagments.add(MyFragment.getInstance(s)); } //getChildFragmentManager() 如果是嵌套在fragment中就要用这个 adapter = new MyPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(adapter); tablayout.setViewPager(viewPager, mTitles); } private class MyPagerAdapter extends FragmentPagerAdapter { public MyPagerAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return mFagments.size(); } @Override public CharSequence getPageTitle(int position) { return mTitles[position]; } @Override public Fragment getItem(int position) { return mFagments.get(position); } }}
这里就说一下MyPagerAdapter,用于viewpager绑定fragment使用,在activity中FragmentManager通过getSupportFragmentManager()去获取,如果在是在fragment中就需要通过getChildFragmentManager()去说去。
我想又得开始吐槽了,特麽这只有20行代码?哈哈,刨去初始化控件啊什么乱七八糟的,真的没有20行,亲自数过。其他同方法实现的效果
补充
补充说明
可能有人会思考,你这现有的布局,都长的差不多,可以使用一个fragment绑定就可以了,如何使用多个fragment,绑定不同的页面呢?简单啦…
为了方便绑定数据,我们先创建一个BaseFragent的抽象类
public abstract class BaseFragment extends Fragment { public abstract int getLayoutID(); public abstract void initView(); public View view; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(getLayoutID(), container, false); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initView(); }}
各自的fragment继承并绑定各自的布局,关联各自的数据,互不干扰
FragmentApublic class FragmentA extends BaseFragment { private String title; private TextView txt; @Override public int getLayoutID() { return R.layout.fragment_layout_a; } @Override public void initView() { txt = (TextView) view.findViewById(R.id.msg); txt.setText("FragmentA:" + title); } public static FragmentA getInstance(String title) { FragmentA mf = new FragmentA(); mf.title = title; return mf; }}
FragmentB
public class FragmentB extends BaseFragment { private String title; private TextView txt; @Override public int getLayoutID() { return R.layout.fragment_layout_b; } @Override public void initView() { txt = (TextView) view.findViewById(R.id.msg); txt.setText("FragmentB:" + title); } public static FragmentB getInstance(String title) { FragmentB mf = new FragmentB(); mf.title = title; return mf; }}
……FragmentC、FragmentD、FragmentE、FragmentF。
修改绑定viewpager的arraylist的对象类型
private ArrayList<BaseFragment> mFagments = new ArrayList<>();
添加数据
//for (String s : mTitles) {// mFagments.add(MyFragment.getInstance(s));//}mFagments.add(FragmentA.getInstance(mTitles[0]));mFagments.add(FragmentB.getInstance(mTitles[1]));mFagments.add(FragmentC.getInstance(mTitles[2]));mFagments.add(FragmentD.getInstance(mTitles[3]));mFagments.add(FragmentE.getInstance(mTitles[4]));mFagments.add(FragmentF.getInstance(mTitles[5]));
以上即可实现绑定不同的Fragment,效果如下:
源码下载
- ViewPager+Fragment+FlycoTabLayout,20行代码实现tabbar(菜单切换效果)
- viewpager+Fragment实现简单滑动切换效果
- ViewPager+Fragment 滑动菜单效果 实现步骤
- ViewPager实现Fragment切换
- 通过Fragment + Viewpager+Gridview实现Android Tab切换菜单
- Fragment+ViewPager实现类似ActionBar切换的效果
- 兔子--Fragment与ViewPager实现切换与侧滑效果
- 使用ViewPager+Fragment实现选项卡切换效果
- 使用ViewPager+Fragment实现选项卡切换效果
- ViewPager+Fragment实现滑动效果,并且能够点击切换
- android viewpager和fragment相结合,实现菜单的滑动效果
- ViewPager+fragment实现切换页面(一)
- “快速递”开发历程(一)ViewPager+Fragment滑动或按钮实现切换效果
- 使用ViewPager实现顶部tabbar切换界面
- viewpager实现翻页效果(fragment)
- ViewPager+Fragment实现页面切换
- Viewpager+Fragment实现页面切换
- Android 安卓 fragment+viewpager 仿qq界面 实现点击菜单切换界面+滑动切换viewpager切换界面
- 第13周—项目一分数类中的运算符重载
- Objective-C 运行时整理
- 项目 - 处理C++源代码的程序
- 神经网络的Trick之Dropout的理解与实现
- java小知识点总结1
- ViewPager+Fragment+FlycoTabLayout,20行代码实现tabbar(菜单切换效果)
- vs中开发Coco2dx显示中文 / 中文乱码问题
- 白天夜间模式切换
- Multi-University 2015 #6 E(hdu 5357 Easy Sequence)
- 分布式系统(一)分布式系统介绍
- C语言基础 优秀习惯起名字与赋初值
- Context应用场景
- lucene中的Filter
- 碎片的生命周期