,再配合上可视化工具拖拽编辑,效率上也有大大的提升,如果你还没有用上,建议你一定要尝试一下。...GuideLine是ConstraintLayout布局的辅助对象,仅用于布局定位使用,它被标记了View.GONE,并不会显示在设备上。...当我们把子layout抽出去之后,它的布局是相对独立的效果,但是总归要include到根布局的,如果能在子layout布局的时候看到它在父layout里面的效果,那就事半功倍了。...代码: android:animateLayoutChanges="true" 效果: 默认添加移除操作是比较生硬的,加上动画之后体验上会好很多。 当然,如果你想修改默认动画也是可以的。怎么修改?...} break; 当animateLayoutChanges属性值为true时,调用setLayoutTransition方法,并传入一个默认的LayoutTransition对象。
如果是CoordinatorLayout的话,就直接返回,所以说我们使用CoordinatorLayout,是可以改变Snackbar的显示位置的; 如果是id为content的FrameLayout...的话就直接返回这个FrameLayout,之前分析Activity启动源码时,我们了解到我们自己写的布局,最终会被添加到DecorView的一个id为content的FrameLayout上,所以这就是一般情况下...的布局,我们看下这个布局 为上面的布局 来看Snackbar的构造方法,发现最终调用的父类BaseTransientBottomBar的构造方法 protected BaseTransientBottomBar...mCurrentSnackbar = null; } } } 如果没有被回收,则调用mManagerCallback的show
无奈之下,寻求万能的谷歌。通过查询,得到如下两种原因及解决方案: android:animateLayoutChanges与RecyclerView刷新共用 ?...图片截自StackOverFlow 通过蹩脚的翻译,得到如下信息: 这个错误的原因是xml布局文件中将android:animateLayoutChanges 设置为true 并且java...由此可知晓android:animateLayoutChanges="true"与RecyclerView的刷新不可同时存在,那么为什么同时存在会报错呢?...我们知道android:animateLayoutChanges="true"是在列表增删Item的时候调用系统自带的动画效果,而RecyclerView的机制是对子视图的复用,不会在真正意义上对Item...的控件进行增加、删除,与android:animateLayoutChanges原理相悖,因此会报错。
协调布局CoordinatorLayout Android自5.0之后对UI做了较大的提升,一个重大的改进是推出了MaterialDesign库,而该库的基础即为协调布局CoordinatorLayout...使用CoordinatorLayout时,要注意以下几点: 1、导入design库; 2、根布局采用android.support.design.widget.CoordinatorLayout; 3、...方法,显示操作是调用show方法; 3、FloatingActionButton默认会随着Snackbar的出现或消失而动态调整位置,有关Snackbar的说明参见《Android开发笔记(一百二十七)...下面是悬浮按钮跟随提示条上移和下移的效果截图: ?...> 底部弹窗BottomSheetBehavior design库提供了Snackbar在页面底部弹出提示条,可是Snackbar着实简单,如果我们想在底部弹出一组菜单,Snackbar就无能为力了。
本篇博客将会给大家带来一个轻量级控件SnackBar,为什么要讲SnackBar?Snackbar:的提出实际上是界于Toast和Dialog的中间产物。...= null,就会一直循环下去,里面会对view进行判断,是CoordinatorLayout,则直接返回,如果是FrameLayout,并且当view.getId() == android.R.id.content...,所以我们想修改这个SnackBar显然是不行的,而且它还强转成了SnackbarLayout布局,我们可以查看一下这个布局的代码,这个布局在design包的layout下 android...Snackbar的布局里面果然是使用了这个布局,如果我们要改变布局的样式,我们就修改这个文件里面的相关属性就可以了,就比如这里的textAppearance。...当view已经绘制完毕后,会给它设置一个出现的动画animateViewIn,否则会给mView设置布局变化的监听,每一次布局改变都会调用动画,并把监听设置为null,这里设置为null也是非常巧妙的,
本系列文章将分成两篇: 第一篇,我们将分析 Toast 所带来的问题 第二篇,将提供解决 Toast 问题的解决方案 (注:本文源码基于Android 7.0) 1.回顾 上一篇 [[Android]...事实上, SnackBar 就是这样的方案。不过,如果不使用系统类型的窗口,就意味着你的Toast 界面,无法在其他应用之上显示。...使用子窗口: 在 Android 进程内,我们可以直接使用类型为子窗口类型的窗口。在 Android 代码中的直接应用是 PopupWindow 或者是 Dialog 。...而在 DecorView 的子节点中,有一个 id 为 android.R.id.content 的 FrameLayout 节点(后面简称 content 节点) 是用来容纳我们所传递进去的 View...的设计可以看出,SnackBar无法定制具体的样式: SnackBar 只能生成 SnackBarLayout 这种控件和布局,可能并不满足你的业务需求。
概述 Snackbar 类似toast,用于向 用户展示信息,和用户交互,它能够显示一个 按钮 获得用户的操作。...它的特点如下: 它作为android.support.design.widget.CoordinatorLayout 的子视图,出现在页面底部。 可以显示一个字符串和一个按钮。...Toast只能显示文本,无法通过 按钮和用户交互 支持向右滑动手势:手指在snackbar上向右滑动,则关闭snackbar 支持设置一个时间,超时自动关闭snackbar 使用方法: 1.放置父布局...fitsSystemWindows="true" android:background="#2a5caa"> android.support.design.widget.CoordinatorLayout...> 2.在代码里执行显示snackbar Snackbar.make(view, "文本", Snackbar.LENGTH_LONG) .setAction("
如果你对CoordinatorLayout的用法还不太了解的话,建议先浏览这篇博文熟悉一下《Android开发笔记(一百三十四)协调布局CoordinatorLayout》。...如果按照普通的实现方式,此种照镜子的动画效果,得给两个视图分别注册监听器,然后在A视图移动之际,同时触发B视图的移动行为。...另外一个Design库的例子,则是悬浮按钮FloatingActionButton配合提示条Snackbar,博文《Android开发笔记(一百三十四)协调布局CoordinatorLayout》提到,...其中parent是页面布局文件的根节点,child是跟随运动的控件,dependency是带头运动的视图。...首先在layoutDependsOn方法中判断依赖视图是否为SnackbarLayout的示例,表示悬浮按钮会跟着提示条一块运动。
目前这个框架提供了几种不用写动画代码就能工作的方法,这些效果包括: 让浮动操作按钮上下滑动,为Snackbar留出空间 ? 扩展或者缩小Toolbar或者头部,让主内容区域有更多的空间。 ?...(view,"HELLO",Snackbar.LENGTH_SHORT).show(); } }); } } 关键点 根布局必须为CoordinatorLayout...,fab自动上移的效果,app:layout_behavior的为自定义的效果,当下滑时,fab消失,上滑时fab显示,详情请查看本人博客 Floating Action Button-Android...在RecyclerView或者任意支持嵌套滚动的view比如NestedScrollView上添加app:layout_behavior。...通常,我们我们都是设置Toolbar的title,而现在,我们需要把title设置在CollapsingToolBarLayout上,而不是Toolbar。
LayoutAnimation 指定 ViewGroup 的子元素出场动画,作用在每个子元素上的动画是补间动画。...比如 item_anim 这个动画的 duration 是 300ms,那么对于 0.2 的 delay 来说,每个子元素在前一个出现的基础上延时 0.2*300=60ms,即按照 animationOrder...ViewGroup 加上 android:animateLayoutChanges="true",布局变化时会自动加上默认的动画。...:id="@+id/rootView" android:animateLayoutChanges="true"> <LinearLayout android:layout_width...LayoutTransition.APPEARING) * 10) transition.setAnimator(LayoutTransition.APPEARING, appearAnim) // 使用滑动动画代替默认布局改变的动画
他们在屏幕的底部显示一条简短的信息,如果是较大的设备就显示在左下角。SnackBar出现在屏幕中所有其他元素的上方,同一时间仅仅只有一条SnackBar”。...该事件下Snackbar退出的原因是;意思是“Snackbar右划退出事件”,注意这个右划事件只有在父布局为CoordinatorLayout才会被触发,其他布局如LinearLayout、RelativeLayout...Snackbar布局,然后找到Snackbar.SnackbarLayout的布局资源文件design_layout_snackbar_include.xml,打开该文件看到一个TextView(吐司左边的信息...的布局文件吗?...里面就是一个TextView和一个Button,如果我们想要对他们进行自定义我们可以先拿到他们的布局view,首先我们看一下Button: final Button snackbar_action
Material Design的基本概念 Material Design是Google设计的一套视觉语言,将优先的经典的设计原理与科技创新相结合,为开发者提供一套完成视觉和交互设计规范。...移动设备是这套设计语言的基础对象,让用户在不同的平台、不同尺寸的设备上能保持一致的体验。 Material Design强调交互上的即时反馈,即对于用户的触控等行为app需要给出即时的反应。...其中,菜单部分的根布局需要添加android:layout_gravity=”start”,如果是右滑的话,改为end即可。 这样就可以完成了一个基本的侧滑效果。...Snackbar的详细使用参见《轻量级控件SnackBar使用以及源码分析》 TextInputLayout 布局: android.support.design.widget.TextInputLayout...android:clipChildren=”false” 子控件是否能不超出padding的区域(比如ScrollView上滑动的时候,child可以滑出该区域) 然后监听滑动事件,这里如果是ScrollView
如果为空, 执行步骤2 。...如果containerViewId 传 0,则这个Fragment不会被放置在一个容器中。...参数containerViewId一般会传Activity中某个视图容器的id。如果containerViewId传0,则这个Fragment不会被放置在一个容器中。...该方法返回一个 View 对象,该对象表示 Fragment 的根视图;若 Fragment 不需要展示视图,则该方法可以返回 null。...Fragment 绑定 UI 布局必须重写 onCreateView() 方法,为 Fragment 绑定布局,该方法返回的 View 就是 Fragment 的根视图 class ItemDetailFragment
起源 在targetSdkVersion为30的情况下,在Android 11的小米10手机上运行,调用ToastUtil的时候闪退报错: null cannot be cast to non-null..." android:textColor="@color/primary_text_default_materiaal_light"/> 根布局LinearLayout...view as LinearLayout 现在看来其实是没有错的,事实上运行在Android11以下也确实没问题。...方案一 使用标准的toast Toast.makeText(context, msg, Toast.LENGTH_SHORT).show() 方案二 使用Snackbar Snackbar的使用跟Toast...Snackbar.make(view, "已加入行程", Snackbar.LENGTH_SHORT).show() 方案三 不使用系统的toast,但可以借鉴来写一个自定义view 大致思路: 初始化引用自定义布局
当渲染一个 Snackbar 时,它通常出现在可见屏幕的底部。Floating action button 必须上移以便腾出空间。...RecyclerView 上的任何滚动事件都将触发 AppBarLayout 或任何包含在其中的 view 的布局发生变化。...transparent 通过像上面那样启用系统栏的半透明效果,你的布局会将内容填充到系统栏后面,因此你还必须在那些不想被系统栏覆盖的布局上使用 android:fitsSystemWindow...确保你的 activity 或者 fragment 的根布局是 CoordinatorLayout。滚动事件不会响应其他任何布局。...在 v23.1.0 版本的 support design library 的更新中提供了一个 setOnDragListener() 方法,如果在此布局中需要拖拽效果的话,这个方法将非常有用。
fab的挂接.gif ---- 二、Snackbar和FloatingActionButton联动 Snackbar感觉就像下面出来的Toast,只是可以交互而已 ?...="@color/jietelan" android:clickable="true" android:focusable="true" android:...> ---- 3.改变Snackbar外观 1).追踪一下源码:getView() 可以发现把Snackbar的跟布局返回出来了,是个FrameLayout,好了,可以肆无忌惮了 --> public...snackbar自定义布局.gif mFab.setOnClickListener(v -> { Snackbar snackbar = Snackbar.make(mClRoot, "Hello...+Snackbar+SheetX3的用法都涉及了 ----
,使用户在体验上更佳,下面就讲一下四种常用的通知方式Notification、Dialog、Toast、Snackbar 通知栏(Notification) public void showNotification...如果你是在Fragment上操作,有一点点的不同,留意注释上的说明 @Override public View onCreateView(LayoutInflater inflater, ViewGroup...builder.setCancelable(true); //添加一个自定义布局,比如一个布局里一个输入框 View view = View.inflate...Snackbar 添加依赖库 compile 'com.android.support:design:25.3.1' 代码如下 public void showSnackbar() {...//第一个参数是随便找当前布局的id就行了 Snackbar snackbar = Snackbar.make(findViewById(R.id.activity_main), "这个操作不重要
这个系列都是主讲的Material Design风格的控件,所以都是控件的一些基本使用,也会扩展讲一些与这个控件相关的东西和效果,如果都会了的同学,可以不看这个系列。...FloatingActionButton显示与隐藏 那如何实现滑动列表时,下滑显示和上滑隐藏的效果呢?...添加icon和改变Snackbar的位置 修改了背景色,文字按钮颜色,是不是还不过瘾?看看我们如何在Snackbar上添加上一个icon图片。其实也非常简单,和修改样式的过程差不多。...(vl.WRAP_CONTENT, vl.WRAP_CONTENT);//让icon的布局位于父布局垂直居中的位置sl.gravity = Gravity.CENTER_VERTICAL; iconImage.setLayoutParams...(sl); snackbarLayout.addView(iconImage, 0); 改变Snackbar的位置 其实改变Snackbar的位置和设置icon的位置布局大同小异,代码如下: // 获取
); 2.2 Snackbar的make()后面连缀调用setAction()来设置一个动作 (两个参数:一参为bar栏右侧点击交互显示内容,二参为重写onClick()的OnClickListener...可以看到,这里调用了Snackbar的make()方法来创建一个Snackbar对象, make()方法的 第一个参数需要传人一个View,只要是当前界面布局的任意一个View都可以,Snackbar...会使用 这个View来自动查找最外层的布局,用于展示Snackbar。...事实上,CoordinatorLayout可以监听其所有子控件的各种事件,然后自动帮助我们做出最为合理的响应。...举个简单的例子,刚才弹出的Snackbar提示将悬浮按钮遮挡住了, 而如果我们能让CoordinatorLayout监听到Snackbar的弹出事件, 那么它会自动将内部的FloatingActionButton
,他也是一个布局,和线性布局什么的都一样用,该布局是协调控件之间的联系的。...="wrap_content" android:textSize="30dp" android:clickable="true" android:layout_gravity...behavior.setListener(this);这一行是必须写的,如果不写的话,就算滑掉了,按照原轨迹再滑过来,还是会显示的,他只是我们看不到了而且,通道还在。...="30dp" android:clickable="true" android:layout_gravity="bottom|right" android...实现上下滑动监听处理方法,其中的scaleX(0)和Y(0)是不显示,为1则显示。两个方法都有关键作用,一个是滚动时,关心该事件,一个是开始滚动,监听该事件。