这么说可能比较抽象,那就先来看看两张导航栏的效果图,第一张是导航栏完全展开时的界面,此时页面头部的导航栏占据了较大部分的高度; ?...; 3、CollapsingToolbarLayout嵌套Toolbar,这是为了定义导航栏上方无论何时都要显示的长条区域,其中Toolbar还要定义两个不同的样式布局,用于分别显示展开与收缩状态时的工具栏界面...这个渐变动画其实可分为两段: 1、导航栏从展开状态向上收缩时,头部的各控件要慢慢向背景色过渡,也就是淡入效果; 2、导航栏向上收缩到一半,顶部的工具栏要换成收缩状态下的工具栏布局,并且随着导航栏继续向上收缩...,新工具栏上的各控件也要慢慢变得清晰起来,也就是淡出效果。...; 2、导航栏向下展开到一半,顶部的工具栏要换成展开状态下的工具栏布局,并且随着导航栏继续向下展开,新工具栏上的各控件也要慢慢变得清晰起来,也就是淡出效果。
为此,Android提供了加强版的工具栏控件即Toolbar,因为Toolbar继承自ViewGroup,而且可在布局文件中像其它布局视图一样使用,所以灵活性大大的提高了。...2、基于上一点,新控件可取到SearchAutoComplete的对象,因此我们可给该对象注册自动完成的字符串适配器,在用户输入文字时,界面会自动弹出符合搜索条件的关键词列表; 3、setAppSearchData...,但即使工具栏上还有空间,该菜单项也不会显示在工具栏上。...2、溢出菜单列表在菜单文字左侧显示图标的方法,使用ActionBar时正常,使用Toolbar时反而不会显示图标了。...下面是新版Toolbar与SearchView的使用截图: ?
有几点要注意的(这边使用的v7包的Toolbar,由于继承Activity已经过时,但如果实在想继承Activity的话,使用v4包下的Toolbar): 1.App主题使用NoActionBar 2...super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = findViewById...inflateMenu(int resId) 膨胀的菜单资源到这个工具栏。 hideOverflowMenu() 隐藏关联菜单溢出项目。...setContentInsetsRelative(int contentInsetStart, int contentInsetEnd) 设置此相对布局方向工具栏的内容插图。...setSubtitle(CharSequence subtitle) 设置此工具栏的字幕。
标签布局TabLayout是MaterialDesign库中的一个新控件,常与工具栏Toolbar搭配使用。...该监听器需实现OnTabSelectedListener接口的三个方法,具体说明如下: onTabSelected: 在标签选中时触发; onTabUnselected: 在标签取消选中时触发; onTabReselected...: 在标签已选中状态再次选中时触发; 上面的属性和方法说明略显单调,那还是给个具体的代码例子,看看这些属性和方法该如何搭配使用。...(R.id.tl_head); tab_title = (TabLayout) findViewById(R.id.tab_title); vp_content = (ViewPager) findViewById...比如对于ViewPager的页面切换,多数情况只需重写onPageSelected一个方法,所以系统已经自带了简单的滑动监听器SimpleOnPageChangeListener,使用该监听器即可大大简化代码
要使用 Toolbar,首先要在 layout 里面添加组件,例如在 activity_main.xml 里添加 android.support.v7.widget.Toolbar android...windowNoTitle">true 最后再 Activity 代码中设置该 Toolbar 为 ActionBar Toolbar toolbar = (Toolbar) findViewById...(R.id.toolbar); setSupportActionBar(toolbar); 至此,一个简单的自定义 ActionBar 就完成了。...如果想 修改导航按钮 的图标,只需要在 Layout 文件中为 Toolbar 增加属性 app:navigationIcon 即可 android.support.v7.widget.Toolbar....widget.Toolbar> 然后,清空原 toolbar 标题 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle
CoordinatorLayout 又名协调者布局,它是support.design包中的控件,所以使用的时候要导入compile 'com.android.support:design:23.3.0’...CollapsingToolbarLayout可以通过app:contentScrim设置折叠时工具栏布局的颜色,通过app:statusBarScrim设置折叠时状态栏的颜色。...在NestedScrollView的名字中其实就可以看出他的作用了,Nested是嵌套的意思,而ToolBar基本需要嵌套使用。...可以使用的其他flag有: enterAlways: 一旦向上滚动这个view就可见。...exitUntilCollapsed: 同样顾名思义,这个flag时定义何时退出,当你定义了一个minHeight,这个view将在滚动到达这个最小高度的时候消失。
在使用别的APP时,TabLayout、Toolbar和StatusBar颜色会随着动画更改,就像下面这样: 实现方式也很简单,为了使当前颜色改变,并使用动画,我们需要在TabLayout.OnTabSelectedListener...的监听中实现onTabSelected(TabLayout.Tab tab)方法。...为了使颜色改变有动画效果,这里我使用了ValueAnimator,设置动画时间和ArgbEvaluator来处理两个ARGB颜色之间的动画步骤。...setContentView(R.layout.activity_update_toolbar_color_layout); tabLayout = (TabLayout) findViewById...(R.id.id_tab_layout); toolbar = (Toolbar) findViewById(R.id.toolbar); for (String color
这里要明确一点,Toolbar本身是页面顶部的工具栏,其上没有本页面的其它控件了,如果Toolbar被拉下来了,那Toolbar上面的空白该显示什么?...app:collapsedTitleTextAppearance : 指定未展开时的标题文字字体。 app:collapsedTitleTextColor : 指定未展开时的标题文字颜色。...setCollapsedTitleTextAppearance : 设置未展开时的标题文字字体。 setCollapsedTitleTextColor : 设置未展开时的标题文字颜色。...下面是标题栏在折叠时显示渐变图片的效果图: ?...3、exitUntilCollapsed : 该标志保证页面上至少能看到最小化的工具栏,不会完全看不到工具栏。具体的滚动说明如下所示: 向上滚动:头部先往上收缩,一直滚到折叠的最小高度。
网络访问框架经过了从使用最原始的AsyncTask构建简单的网络访问框架(甚至不能称为框架),后来使用开源的android-async-http库,再到使用google发布的volley库,一直不懈的寻找更好的解决方案...下面是我们常用的mvp模式的运行模型: ?...android.support.design.widget.FloatingActionButton; import android.support.v7.app.AppCompatActivity; import android.support.v7...(R.id.toolbar); setSupportActionBar(toolbar); mTvContent = (TextView) findViewById...(R.id.tv_content); mProgressBar = (ProgressBar) findViewById(R.id.progress_bar);
Toolbar是应用的内容的标准工具栏,可以说是Actionbar的升级版,两者不是独立关系,要使用Toolbar还是得跟ActionBar扯上关系的。...相比Actionbar Toolbar最明显的一点就是变得很自由,可随处放置,因为它是作为一个ViewGroup来定义使用的,所以单纯使用ActionBar已经稍显过时了,它的一些方法已被标注过时。...Toggle按钮的,解决方法时把侧滑的布局设置为clickable="true"。...当我们的Pager切换时伴随着Fragment的变化,而Fragment里的内容一般是不同的,所以每个Fragment里的一般视觉效果也是不同的,所以我们可以用Palette来去提取Fragment中的主色调...设置成一样时的情况更多的是没有ActionButton这些明显的东西或没有三个点的更多ActionButton时,看起来更平面一点,更浑然一体。
exitUntilCollapsed,剩余内容开始滚动之前将首先达到 Toolbar 的最小高度,然后退出屏幕: snap:使用这一选项将由其决定在 view 只有部分减时所执行的功能。...创建视差动画 CollapsingToolbarLayout 可以让我们做出更高级的动画,例如使用一个在折叠的同时可以渐隐的 ImageView。在用户滑动时,标题的高度也可以改变。...如果你在使用 behavior 时遇到了问题,请查看下面的建议: 关于如何高效使用 CoordinatorLayout 的例子请仔细参考 cheesesquare 源码。...在一个使用了内部有 items 列表的 ViewPager 的 fragment 和一个父 activity 之间使用协调时,你想像这里描述的那样在ViewPager 上添加 app:layout_behavior...使用 CoordinatorLayout 时出错的方式有很多种,当你发现出错时可以在这里添加提示。
exitUntilCollapsed:值设为exitUntilCollapsed的View,当这个View要往上逐渐“消逝”时,会一直往上滑动,直到剩下的的高度达到它的最小高度后,再响应ScrollView...enterAlwaysCollapsed:是enterAlways的附加选项,一般跟enterAlways一起使用,它是指,View在往下“出现”的时候,首先是enterAlways效果,当View的高度达到最小高度时...,View就暂时不去往下滚动,直到ScrollView滑动到顶部不再滑动时,View再继续往下滑动,直到滑到View的顶部结束。...最后snap这是属性是子View不会存在局部显示的情况,滚动Child View的部分高度,当我们松开手指时,Child View要么向上全部滚出屏幕,要么向下全部滚进屏幕。...CollapsingToolbarLayout只要有这方面: 1.title展开时是最大的,然后随着收缩会越来越少,直到屏幕的顶部,通过app:title设置title,不然就默认。
对于大家关心的额外功能,则主要有以下几点: 1、支持响应主体页面的滑动行为,即在主体页面上移或者下拉时,AppBarLayout能够捕捉到主体页面的滚动操作; 2、AppBarLayout捕捉到滚动操作之后...scroll|enterAlways",声明工具栏的滚动行为标志; 6、演示页面的主体页面使用RecyclerView控件,并给该控件节点添加行为属性app:layout_behavior="@string...2、AppBarLayout内部的高度也可能变化,比如它嵌套了可折叠工具栏布局CollapsingToolbarLayout,有关可折叠工具栏布局的详细介绍参见《Android开发笔记(一百三十六)可折叠工具栏布局...3、exitUntilCollapsed : 该标志保证页面上至少能看到最小化的工具栏,不会完全看不到工具栏。具体的滚动说明如下所示: 向上滚动:头部先往上收缩,一直滚到折叠的最小高度。...5、snap : 在用户手指松开时,系统自行判断,接下来是全部向上滚到顶,还是全部向下展开。 点击下载本文用到的应用栏布局的工程代码 点此查看Android开发笔记的完整目录
3、Espresso 自动化测试使用Android的Instrumentation API,这些API的调用在一个与UI线程不同的线程中运行,因此,使用自动化方法测试用户界面会导致严重的并发问题,进而产生不一致不可靠的测试结果...在运行时,这些测试的执行对象是去掉了所有 final 修饰符的修改版 android.jar。这样一来,您就可以使用 Mockito 之类的常见模拟库。...这些测试有权访问 Instrumentation API,让您可以获取某些信息(例如您要测试的应用的 Context), 并且允许您通过测试代码来控制受测应用。...可以在编写集成和功能 UI 测试来自动化用户交互时,或者在测试具有模拟对象无法满足的 Android 依赖项时使用这些测试。...不过,由于 Gradle 会自动在构建时生成该文件,因此它在您的项目源集中不可见。您可以在必要时(例如需要为 minSdkVersion 指定其他值或注册测试专用的运行侦听器时)添加自己的清单文件。
概述 在我们的开发过程中,需要获取XML布局文件中的ViewId,以便其赋值显示,我们习惯使用findViewById进行操作,可这样会导致很多的模版代码出现。...就是在我们访问那个View的时候它不存在。为什么会出现这种情况呢?例如不小心使用了错误的Id,或者访问的时候那个view还不存在。...使用了错误Id这个估计大家都有此类经历,但是访问时候那个view不存在怎么理解呢?...例如我们在手机横屏和竖屏的时候分别使用一套XML layout文件,假设横屏中包含了一个竖屏中没有的view,那么在屏幕从横屏旋转到竖屏的时候,NullPointer问题就出现了。...总结 目前ViewBinding的功能还不够完善,比如XML中使用了 inClude 标签时无法对view进行引用。但总体来说已经很不错了。
标题栏 因为我平常项目中的标题栏使用的是Toolbar。当然大家在这个需求上面,用个其他类型的ViewGroup也是一样的。...大家知道,Toolbar也是继承ViewGroup的, public class Toolbar extends ViewGroup { }复制代码 所以使用方法也是和一般的ViewGroup一样。...,对ImageView使用android:layout_gravity="right"。...我们的布局代码就变成了:(ps:因为我用的是百分比布局,所以Framelayout变为了PercentFrameLayout,LinearLayout变为了PercentLinearLayout) android.support.v7...我这边是使用了SearchView的onActionViewCollapsed及onActionViewExpanded方法 onActionViewExpanded方法: 初始SearchView是否已经是展开的状态
接下来,我们就一步一步的来看如何使用 Toolbar(其实是我使用 Toolbar 踩坑填坑的血泪史,你们接下去看,我先擦个眼泪.... )。...为此,我们需要在工程中引入 appcompat-v7 的兼容包,使用 android.support.v7.widget.Toolbar 进行开发。...Toolbar属性设置无效 刚开始使用Toolbar的时候,我的布局文件中是这样写的 <?...仿知乎主页面 为了加深一下 Toolbar 的开发体验,我们使用 Toolbar 来实现知乎主页的效果!...System Bar 的最佳实践 总结 关于 Toolbar 的使用就介绍到此,本来是怀着很简单就可以上手的心态来使用,结果发现还是有很多坑需要填。
android:layout_width="match_parent" android:layout_height="match_parent"> android.support.v7...return view;复制代码 你有想过这个onCreate方法中的ViewGroup参数到底是什么,为什么这里它可以直接使用findViewById等。然后去对RecycleView做处理。...既然这个ViewGroup container就是我们传入的id对应的View ,即我们的Activity布局中的LinearLayout,我们当然后直接对这个container通过findViewById...这个View里面包括了ToolBar和RecycleView,所以可以通过recyclerView = (RecyclerView) container.findViewById(R.id.recycler...android:layout_width="match_parent" android:layout_height="match_parent"> android.support.v7
Google 非常推荐大家使用 Toolbar 来作为Android客户端的导航栏,以此来取代之前的 Actionbar 。与 Actionbar 相比,Toolbar 明显要灵活的多。...---- Toolbar的基本使用 ---- 使用V7的向下兼容包 前面提到 Toolbar 是在 Android 5.0 才开始加上的,Google 为了将这一设计向下兼容,自然也少不了要推出兼容版的...为此,我们需要在工程中引入 appcompat-v7 的兼容包,使用 android.support.v7.widget.Toolbar 进行开发。 ---- 工程目录 ?...下面有几个代码里面需要注意的地方: 我们在使用 Toolbar 时候需要先隐藏掉系统原先的导航栏,网上很多人都说给Activity设置一个NoActionBar的Theme。...功能点说明 右上角使用自定义样式代替默认系统样式(3个黑色的点) 在4.4之上的版本,可以看到 Translucent System Bars 详情见博文的样式,低版本的引用系统默认主题。