Toolbar TabLayout ViewPager

来源:互联网 发布:mysql delete sql 编辑:程序博客网 时间:2024/06/05 02:34

这三个都是独立的控件,但是很多时候放在一起使用,所以这里一起记录

toolbar

toolbar 和 actionbar

我没学过 actionbar,所以这里也不会来解释 actionbar,这里主要是想搞懂 toolbar 到底是来干什么的
目前我把 toolbar 理解为一个可以自定义样式的 actionbar,它的功能和 actionbar 相同,只是它能自定义样式
它本身只是一个普通的 ViewGroup,当使用setSupportActionBar(toolbar);之后它将接管 actionbar 的工作(前提是这个 Activity 是 NoActionbar 主题的,否则编译报错)。具体表现为 toolbar 置顶,显示 Activity 的标题(即使 toolbar 本身并没有被指定标题),能先显示 optionMenu 等

toolbar 的子 view 是从左往右依次排列的,像是一个水平的 LinearLayout,也不能设置子 view 的具体水平位置,只能设置一个外边距

toolbar 的常用方法

toolbar 的一些方法只能在setSupportActionBar(toolbar);之后被调用,应该是这些方法要接管 actionbar 的功能吧,所以最好一开始就setSupportActionBar(toolbar);

为 optionMenu 设置监听

重写 Activity 的onCreateOptionsMenu,但是不重写onOptionsItemSelected,而是通过 toolbar 的setOnMenuItemClickListener方法来设置,效果一样。这种方法方便不同的 toolbar 使用不同的监听器

为Toolbar添加后退按钮

Toolbar有可以设置一个导航按钮,这个导航按钮的功能和图标是可以自定义的。所以除了可以用它呼出侧滑菜单之外,也可以用它实现结束Activity的功能

//这两行要放在 setSupportActionbar 下面toolbar.setNavigationIcon(R.mipmap.ic_launcher);toolbar.setNavigationOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        finish();    }});

另一个方法是使用老的ActionBar,setSupportActionBar()后,用getSupportActionBar()获得ActionBar对象。缺点是不能自定义返回按钮的图标。与上一种方法不同的是,按钮现在作为一个menu菜单,所以他的行为要在onOptionsItemSelected()方法中定义。

getSupportActionBar().setDisplayHomeAsUpEnabled(true);public boolean onOptionsItemSelected(MenuItem item) {    switch(item.getItemId()){    //这个id是固定,是系统给的        case android.R.id.home:            finish();            break;    }    return true;}

TabLayout

TabLayout 就是提供用户一些标签来使用,可以设置监听器来知晓哪个 tab 被点击,同时做出相应的操作
向 TabLayout 中添加标签
很容易就能猜到,这东西可以用来实现底部导航栏

TabLayout.Tab

这是最初的添加 tab 的方法,在Java代码中tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));,不能在 xml 中添加,因为 TabLayout.Tab 没有对应的 xml 标签,同时提供监听器来监听当前是哪个 tab 被选中

如果 TabLayout 关联了 ViewPager,TabLayout.Tab的一些属性就由 PagerAdapter 来提供了,也就是说,如果不重写 PagerAdapter 中相应的方法,即使在 tab 中已经被设置了一些属性,也不会显示出来
另一个坑是 PagerAdapter 没有提供返回图标的方法,一旦绑定 ViewPager,tab 就无法显示图标(这里说的是官方不提供方法,但是安卓程序员有奇智),而不绑定,则是可以设置并显示图标的

TabItem

留白、以后再记

TabView

留白、以后再记

ViewPager

这里主要是简单说明下 ViewPager 是个什么东西

1、ViewPager主要用来左右滑动。(类似图片轮播)
2、ViewPager要用适配器来连接“视图”和“数据”。(大家可以联想下listview的使用方法,原理是类似的)
3、官方推荐ViewPager与Fragment一起使用,并且有专门的适配器。

ViewPager 类似于 ListView,是滑动显示数据的一种控件,当然它也需要 adapter
用法也和 ListView 相似,创建数据——创建 adapter——为 ViewPager 设置adapter
ViewPager 使用的 adapter 是 PagerAdapter,官方建议 ViewPager 搭配 Fragment 来使用,为此还专门提供了 PagerAdapter 的两个子类 FragmentPagerAdapter 和 FragmentStatePagerAdapter

FragmentPagerAdapter与FragmentStatePagerAdapter的区别
FragmentPagerAdapter:超出缓存数量时销毁Fragment
FragmentStatePagerAdapter:Fragment不可见时销毁

关于 App 中常见的循环滑动,Google 并没有提供现成的方法,这里也先不做深入了解

这里提一下 ViewFlipper,它也可以做页面的轮换,继承ViewAnimator,切换view的时候是有动画效果的,适合做ppt,多界面的程序欢迎引导界面,算是个轻量级的组件,适合展示静态数据,少量数据

ViewPager viewPager;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.view_pager_aty);    viewPager = (ViewPager) findViewById(R.id.view_pager);    Fragment[] fragments = new Fragment[]{            BlankFragment.newInstance("1111111",null),            BlankFragment.newInstance("2222222",null)    };    viewPager.setAdapter(new adapter(getSupportFragmentManager(),fragments));}class adapter extends FragmentPagerAdapter {    Fragment[] fragments = new Fragment[2];    public adapter(FragmentManager fm,Fragment[] fragments) {        super(fm);        this.fragments = fragments;    }    @Override    public Fragment getItem(int i) {        return fragments[i];    }    @Override    public int getCount() {        return fragments.length;    }}
原创粉丝点击