Android之官方导航栏之Toolbar(Toolbar+DrawerLayout+ViewPager+PagerSlidingTabStrip)
通过前几篇文章,我们对Android的导航栏有了一定的了解认识,本次文章将对Toolbar进行综合应用,主要结合DrawerLayout、ViewPager、PagerSlidingTabStrip一起使用。
PagerSlidingTabStrip是github上一个开源库,地址为:https://github.com/astuetz/PagerSlidingTabStrip
DrawerLayout之前有过介绍,在此不在过多介绍。
先看布局文件:
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context="com.jredu.MainActivity" >
- <android.support.v7.widget.Toolbar
- android:id="@+id/toolbar"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="?attr/colorPrimary"
- android:minHeight="?attr/actionBarSize" />
- <android.support.v4.widget.DrawerLayout
- android:id="@+id/drawerLayout"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_below="@id/toolbar" >
- <LinearLayout
- android:id="@+id/main"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <com.jredu.PagerSlidingTabStrip
- android:id="@+id/tabs"
- style="@style/pagerTabStype"
- android:layout_width="match_parent"
- android:layout_height="48dip"
- android:background="@drawable/background_tabs" />
- <android.support.v4.view.ViewPager
- android:id="@+id/pager"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- tools:context=".MainActivity" />
- </LinearLayout>
- <LinearLayout
- android:id="@+id/left"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="start"
- android:background="#fff"
- android:orientation="vertical" >
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_vertical"
- android:orientation="horizontal"
- android:paddingTop="30dp" >
- <ImageView
- android:layout_width="80dp"
- android:layout_height="80dp"
- android:src="@drawable/ic_launcher" />
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:paddingLeft="20dp" >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="用户名"
- android:textSize="18sp" />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="身份"
- android:textSize="18sp" />
- </LinearLayout>
- </LinearLayout>
- </LinearLayout>
- </android.support.v4.widget.DrawerLayout>
- </RelativeLayout>
布局文件很简单,首先将整个布局划分为两个部分,上面是Toolbar,下面是DrawerLayout,在DrawerLayout里面有分为两个部分,分别是主布局和侧边布局。侧边布局没啥好说的,主要是主布局,在主布局里面,上面部分是PagerSlidingTabStrip,下面部分是ViewPager。
布局文件完成之后,我们来看java文件,首先将Toolbar和DrawerLayout使用ActionBarDrawerToggle关联起来,代码如下:
- Toolbar boolBar = (Toolbar)findViewById(R.id.toolbar);
- mDrawerLayout = (DrawerLayout)findViewById(R.id.drawerLayout);
- boolBar.setTitle("杰瑞教育");
- setSupportActionBar(boolBar);
- getSupportActionBar().setHomeButtonEnabled(true);
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, boolBar,R.string.drawer_open, R.string.drawer_close);
- mDrawerToggle.syncState();
- mDrawerLayout.setDrawerListener(mDrawerToggle);
然后看看如何结合PagerSlidingTabStrip和ViewPager,PagerSlidingTabStrip很简单,我们只需要将库里的java文件和所需要的attr文件拷到我们的项目里面即可。
- tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
- pager = (ViewPager) findViewById(R.id.pager);
- MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager());
- pager.setAdapter(adapter);
- tabs.setViewPager(pager);
通过PagerSlidingTabStrip的setViewPager方法即可将两个组件关联起来。不过要想实现如上效果,还必须编写样式,具体如下:
- <style name="AppTheme" parent="AppBaseTheme">
- <item name="colorPrimary">#1570A6</item>
- <item name="actionBarSize">50dp</item>
- <item name="windowActionBar">false</item>
- <item name="titleTextAppearance">@style/CustomTitleTextAppearance</item>
- </style>
- <style name="CustomTitleTextAppearance">
- <item name="android:textColor">#fff</item>
- <item name="android:textSize">20sp</item>
- </style>
- <!-- PagerSlidingTabStrip的自定义样式 -->
- <style name="pagerTabStype">
- <item name="pstsShouldExpand">true</item>
- <item name="pstsDividerColor">#00000000</item>
- <item name="pstsUnderlineHeight">1dp</item>
- <item name="pstsIndicatorHeight">3dp</item>
- <item name="pstsIndicatorColor">#1570A6</item>
- </style>
需要说明的的PagerSlidingTabStrip没有提供选中tab字体颜色的方法,在这里可自行修改源码实现。
想要了解更多内容的小伙伴,可以点击查看源码,亲自运行测试。
疑问咨询或技术交流,请加入官方QQ群: (452379712)
出处:http://www.cnblogs.com/jerehedu/
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Android之官方导航栏之Toolbar(Toolbar+DrawerLayout+ViewPager+PagerSlidingTabStrip)的更多相关文章
- Android之官方导航栏ActionBar
一.ActionBar概述 ActionBar是android3.0以后新增的组件,主要用于标示应用程序以及用户所处的位置并提供相关操作以及全局的导航功能.下面我们就看看如何使用ActionBar,真 ...
- android之官方导航栏ActionBar(三)之高仿优酷首页
一.问题概述 通过上两篇文章,我们对如何使用ActionBar大致都已经有了认识.在实际应用中,我们更多的是定制ActionBar,那么就需要我们重写或者定义一些样式来修饰ActionBar,来满足具 ...
- Android官方导航栏ActionBar(二)—— Action View、Action Provider、Navigation Tabs的详细用法
在上一篇文章(Android之官方导航栏ActionBar)中,我们介绍了ActionBar各组成部分的基本应用.ActionBar除了提供Action Buttons外,还提供了多种导航方式如 Ac ...
- Android应用底部导航栏(选项卡)实例
现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个底部的导航栏的功能. 我们先看下该demo实例的框架图: 其 ...
- android MIPI屏 导航栏丢失
/**************************************************************************** * android MIPI屏 导航栏丢失 ...
- Android 修改底部导航栏navigationbar的颜色
Android 修改底部导航栏navigationbar的颜色 getWindow().setNavigationBarColor(Color.BLUE); //写法一 getWindow().set ...
- Andorid之官方导航栏Toobar
在前面学习使用ActionBar的时候,我们就发现ActionBar中有些方法被标记为过时了,原来在android5.0之后,google推出了一个新的导航工具栏,官方将其定义为:A standard ...
- Android应用-底部导航栏的使用
目录 1. 设计底部导航栏页面 1.1. 创建必须的文件夹 1.2. 设计主页面 2. 设计逻辑函数 3. 项目展示 底部导航栏是基于Bottom Navigation Bar 插件使用的 这个插件包 ...
- Android之侧滑导航栏
今天学习的新内容是侧滑导航栏,我想大家肯定都比较熟悉了,因为这个效果在qq里面也有,最近一直跟室友们玩的游戏是快速让自己的头像的点赞量上千.当然我的效果跟qq是没有办法比的,因为那里面的功能是在是太强 ...
随机推荐
- 并发之AQS原理(三) 如何保证并发
并发之AQS原理(三) 如何保证并发 1. 如何保证并发 AbstractQueuedSynchronizer 维护了一个state(代表了共享资源)和一个FIFO线程等待队列(多线程竞争资源被阻塞时 ...
- PHP: POST Content-Length of xxx bytes exceeds the limit of 8388608 bytes
用户上传了 4 个附件,每个小于 5M,但是总大小超过了 15 M. 在 Nginx 日志中找到了如下错误信息,还没有到 Laravel 日志那一层. 2018/08/13 10:14:38 [err ...
- zookeeper单机集群搭建
1. 下载zookeeper 参考官方文档下载一节:https://zookeeper.apache.org/doc/current/zookeeperStarted.html#sc_Download ...
- [HNOI2016]序列(未通过)
题解: 虽然知道有点问题但是并没有debug出来 发现错误了..相同元素的处理有错误 网上题解大都是分块..(hn怎么道道分块) 用最普通的思路,可以枚举每个点作为最小值,向左向右延伸 但是多组询问显 ...
- 使用asp.net 2.0中的SqlBulkCopy类批量复制数据
介绍:在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用. 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据. ASP.NET 2.0有一个Sq ...
- 2015 Benelux Algorithm Programming Contest I- Interesting Integers
题目大意:给你一个数字n(n<=1e9) ,让你求一个能包含这个数的斐波那契数列的第一项a 和第二项b,找出b最小的那个. 帮我复习了一下扩展欧几里得.... 思路:a,b,a+b,a+2b…… ...
- BZOJ4994 [Usaco2017 Feb]Why Did the Cow Cross the Road III 树状数组
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4994 题意概括 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi ...
- StringBuilder和+来串接字符串,时间的比较
一:程序比较 1.使用+ 2.使用的时间 虽然时间一直在变动,但是仍然可以看到时间在1000ms左右 3.使用StringBuilder 4.使用的时间 虽然时间每次在变化,但是时间在350ms左右变 ...
- 037 关于pom.xml的一些问题的理解
最近在pom上出了一些问题,搞了一天才理解了一些问题,记录一下. 当在覆盖本地repository包之后,pom.xml上面出现了一个x. 当mvn->update project之后,还是有许 ...
- hdu 3065 病毒侵袭持续中【AC自动机】
<题目链接> 题目大意: 小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的“万恶之源”.这是一个庞大的病毒网站,他有着好多好多的病毒,但是 ...