博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用TabLayout快速实现一个导航栏
阅读量:5069 次
发布时间:2019-06-12

本文共 3596 字,大约阅读时间需要 11 分钟。

在没有Material Design的年代,要实现一个类似微信主页面的效果,我们有以下几种解决方案:

1.Fragment + ViewPager  +  RadioGroup自定义固定导航条

2.Fragment + ViewPager  带滑动导航条

3.Fragment + ViewPager +  HorizontalScrollView自定义滑动导航条

当然,除了这些之外,还有许多已经被Google丢弃的方案,我们就不说了。当有了Material Design之后,一切都变得那么漂亮,也变得那么简单,我们今天就来看看怎么用TabLayout快速实现一个导航栏。先来看看效果图:

这就是我们要实现的一个效果,好了,开始吧。

1.添加依赖文件

compile 'com.android.support:design:23.1.1'compile 'com.android.support:support-v4:23.1.1'

在gradle文件中添加上面两个文件的依赖。

2.在布局文件中引入TabLayout

主布局文件如下:

通过上面的示例图我们已经看到了,我们的App上面是一个TabLayout,下面是一个ViewPager,所以我们的布局文件中添加这两个东西就可以了,注意TabLayout的引用方式。

3.创建Fragment

实际开发中我们可能需要创建多个Fragment,在这里做示例我就只创建一个,然后多次使用,思路是这样的,每次实例化一个Fragment的时候,传入该Fragment要显示的文本,代码如下:

public class MyFragment extends Fragment {    private static final String ARG_PARAM1 = "param1";    private String mParam1;    public static MyFragment newInstance(String param1) {        MyFragment fragment = new MyFragment();        Bundle args = new Bundle();        args.putString(ARG_PARAM1, param1);        fragment.setArguments(args);        return fragment;    }    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        if (getArguments() != null) {            mParam1 = getArguments().getString(ARG_PARAM1);        }    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment_my, null);        TextView content = (TextView) view.findViewById(R.id.fg_tv);        content.setText(mParam1);        return view;    }}
Fragment的布局文件是这样的:

4.自定义一个FragmentPagerAdapter

这个FragmentPagerAdapter我们在之前使用ViewPager的时候都有自定义过,这里就不多说了,直接上代码:

public class MyFragmentAdapter extends FragmentPagerAdapter {    private final int PAGE_COUNT = 3;    private final String[] titles;    private Context context;    private List
fragments; public MyFragmentAdapter(List
fragments,String[] titles, FragmentManager fm, Context context) { super(fm); this.context = context; this.fragments = fragments; this.titles = titles; } @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return fragments.size(); } @Override public CharSequence getPageTitle(int position) { return titles[position]; }}
注意,这里有个不同的地方就是我们重写了方法getPageTitle,这个方法返回ViewPager中每个Fragment对应的title。

最后,我们再来看看MainActivity,首先初始化数据,初始化Fragment,这些都是ViewPager基本用法,我们来看看最后一句,这一句就是将ViewPager和TabLayout绑定在一起,实现了ViewPager和TabLayout的同步。

public class MainActivity extends AppCompatActivity {    private String[] titles = new String[]{"聊天", "好友", "发现", "我的","聊天", "好友", "发现", "我的","聊天", "好友", "发现", "我的"};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);        List
fragments = new ArrayList
(); for (int i = 0; i < titles.length; i++) { fragments.add(MyFragment.newInstance(titles[i])); } FragmentPagerAdapter adapter = new MyFragmentAdapter(fragments, titles, getSupportFragmentManager(), this); viewPager.setAdapter(adapter); TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout_navi); tabLayout.setupWithViewPager(viewPager); }}

转载于:https://www.cnblogs.com/qitian1/p/6461711.html

你可能感兴趣的文章
Java调用动态库方法说明-最详细
查看>>
Winform Webbrowser Google
查看>>
10. windows下原来可以这样隐藏webshell
查看>>
机器学习之主成分分析(PCA)
查看>>
【转】json对象和java对象的相互转换
查看>>
react学习记录(持续。。。)
查看>>
HDU 5441 Travel (离线dsu)
查看>>
C++ 语法要点
查看>>
https://www.careercup.com/question?id=5742560911818752
查看>>
TDD
查看>>
Linux —— gcc编译文件
查看>>
面试题(C#算法编程题)
查看>>
Reinstall Microsoft Helper Viewer
查看>>
Python中的实例方法、类方法、静态方法和普通方法
查看>>
JDE客户端get时报错“ERROR:fetch from table F0101 failed”
查看>>
Javascript面试题大全
查看>>
js正则表达式利器
查看>>
C#根据xsd生成xml
查看>>
WebAPI集成SignalR
查看>>
使用SevenZipSharp压缩/解压7z格式
查看>>