首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果根布局上的android:animateLayoutChanges为true,则Snackbar闪烁

android:animateLayoutChanges 是一个在 Android 开发中用于控制布局变化时是否启用动画的属性。当这个属性设置为 true 时,Android 系统会在布局发生变化时自动应用默认的过渡动画,比如添加或移除视图时的滑动效果。

基础概念

  • 布局动画:当布局发生变化时,如添加或删除视图,Android 提供了一种机制来平滑过渡这些变化。
  • Snackbar:是一种轻量级的反馈消息,通常用于显示简短的消息或提供操作按钮。

问题描述

当在根布局上设置了 android:animateLayoutChanges="true",并且在此布局上显示 Snackbar 时,可能会出现闪烁现象。这是因为 Snackbar 的显示和隐藏与布局变化的动画发生了冲突。

原因分析

Snackbar 在显示时会添加一个视图到根布局中,并在隐藏时移除这个视图。当 android:animateLayoutChanges 设置为 true 时,系统会对这些添加和移除操作应用默认的动画。如果 Snackbar 的显示和隐藏动画与系统的默认动画不同步,就可能导致视觉上的闪烁。

解决方案

为了避免这种闪烁,可以采取以下几种方法:

  1. 关闭根布局的动画: 在显示 Snackbar 之前,临时将 android:animateLayoutChanges 设置为 false,并在 Snackbar 隐藏后恢复为 true
  2. 关闭根布局的动画: 在显示 Snackbar 之前,临时将 android:animateLayoutChanges 设置为 false,并在 Snackbar 隐藏后恢复为 true
  3. 自定义 Snackbar 的动画: 可以通过设置自定义的进入和退出动画来避免与系统动画冲突。
  4. 自定义 Snackbar 的动画: 可以通过设置自定义的进入和退出动画来避免与系统动画冲突。
  5. 使用 CoordinatorLayout: 如果可能,将 Snackbar 放在 CoordinatorLayout 中,这样可以更好地与 Snackbar 的动画协同工作。
  6. 使用 CoordinatorLayout: 如果可能,将 Snackbar 放在 CoordinatorLayout 中,这样可以更好地与 Snackbar 的动画协同工作。
  7. 然后在代码中:
  8. 然后在代码中:

通过上述方法,可以有效地解决 Snackbar 在启用布局变化动画时出现的闪烁问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【建议收藏】17个XML布局小技巧

,再配合上可视化工具拖拽编辑,效率上也有大大的提升,如果你还没有用上,建议你一定要尝试一下。...GuideLine是ConstraintLayout布局的辅助对象,仅用于布局定位使用,它被标记了View.GONE,并不会显示在设备上。...当我们把子layout抽出去之后,它的布局是相对独立的效果,但是总归要include到根布局的,如果能在子layout布局的时候看到它在父layout里面的效果,那就事半功倍了。...代码: android:animateLayoutChanges="true" 效果: 默认添加移除操作是比较生硬的,加上动画之后体验上会好很多。 当然,如果你想修改默认动画也是可以的。怎么修改?...} break; 当animateLayoutChanges属性值为true时,调用setLayoutTransition方法,并传入一个默认的LayoutTransition对象。

92110

Toast与Snackbar的那点事

WindowManager检查当前窗口的token是否有效,如果有效,则添加窗口展示Toast;如果无效,则抛出上述异常,Crash发生。 详细的原理图如下: ?...按照Snackbar的实现方式,找到一个可以添加布局的父布局,采用addView的方式添加通知。...> 问题一解决 针对Snackbar弹出的时候,被Dialog,PopupWindow等控件遮住的问题,原因在于Snackbar依赖于View,当把Activity布局的View传给Snackbar做为...这种方案:优点在于代码改动量小;缺点在于在页面切换过程中,如果Snackbar没有展示结束,会出现一次闪烁。...虽然在技术上这种方案很好,代码的侵入性极低,但是这个闪烁对于产品来说无法接受,因此这种方案也不做考虑。

2.4K60
  • 轻量级控件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也是非常巧妙的,

    1.5K20

    当你刷新RecyclerView程序崩掉的时候

    无奈之下,寻求万能的谷歌。通过查询,得到如下两种原因及解决方案: android:animateLayoutChanges与RecyclerView刷新共用 ?...图片截自StackOverFlow 通过蹩脚的翻译,得到如下信息: 这个错误的原因是xml布局文件中将android:animateLayoutChanges 设置为true 并且java...由此可知晓android:animateLayoutChanges="true"与RecyclerView的刷新不可同时存在,那么为什么同时存在会报错呢?...我们知道android:animateLayoutChanges="true"是在列表增删Item的时候调用系统自带的动画效果,而RecyclerView的机制是对子视图的复用,不会在真正意义上对Item...的控件进行增加、删除,与android:animateLayoutChanges原理相悖,因此会报错。

    2.3K20

    Android开发笔记(一百三十四)协调布局CoordinatorLayout

    协调布局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就无能为力了。

    2.2K30

    Toast问题深度剖析(二)

    本系列文章将分成两篇: 第一篇,我们将分析 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 这种控件和布局,可能并不满足你的业务需求。

    5K124

    Android开发笔记(一百三十七)自定义行为Behavior

    如果你对CoordinatorLayout的用法还不太了解的话,建议先浏览这篇博文熟悉一下《Android开发笔记(一百三十四)协调布局CoordinatorLayout》。...如果按照普通的实现方式,此种照镜子的动画效果,得给两个视图分别注册监听器,然后在A视图移动之际,同时触发B视图的移动行为。...另外一个Design库的例子,则是悬浮按钮FloatingActionButton配合提示条Snackbar,博文《Android开发笔记(一百三十四)协调布局CoordinatorLayout》提到,...其中parent是页面布局文件的根节点,child是跟随运动的控件,dependency是带头运动的视图。...首先在layoutDependsOn方法中判断依赖视图是否为SnackbarLayout的示例,表示悬浮按钮会跟着提示条一块运动。

    1.3K20

    Snackbar使用详解及其相关框架TSnackbar

    他们在屏幕的底部显示一条简短的信息,如果是较大的设备就显示在左下角。SnackBar出现在屏幕中所有其他元素的上方,同一时间仅仅只有一条SnackBar”。...该事件下Snackbar退出的原因是;意思是“Snackbar右划退出事件”,注意这个右划事件只有在父布局为CoordinatorLayout才会被触发,其他布局如LinearLayout、RelativeLayout...Snackbar布局,然后找到Snackbar.SnackbarLayout的布局资源文件design_layout_snackbar_include.xml,打开该文件看到一个TextView(吐司左边的信息...的布局文件吗?...里面就是一个TextView和一个Button,如果我们想要对他们进行自定义我们可以先拿到他们的布局view,首先我们看一下Button: final Button snackbar_action

    2.5K20

    一篇博客让你了解Material Design的使用

    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

    3.4K30

    CoordinatorLayout与滚动的处理

    目前这个框架提供了几种不用写动画代码就能工作的方法,这些效果包括: 让浮动操作按钮上下滑动,为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。

    80920

    用 CoordinatorLayout 处理滚动

    当渲染一个 Snackbar 时,它通常出现在可见屏幕的底部。Floating action button 必须上移以便腾出空间。 ?...RecyclerView 上的任何滚动事件都将触发 AppBarLayout 或任何包含在其中的 view 的布局发生变化。...transparent 通过像上面那样启用系统栏的半透明效果,你的布局会将内容填充到系统栏后面,因此你还必须在那些不想被系统栏覆盖的布局上使用 android:fitsSystemWindow...确保你的 activity 或者 fragment 的根布局是 CoordinatorLayout。滚动事件不会响应其他任何布局。...在 v23.1.0 版本的 support design library 的更新中提供了一个 setOnDragListener() 方法,如果在此布局中需要拖拽效果的话,这个方法将非常有用。

    4.8K92

    Material Design 实战 之第三弹—— 悬浮按钮和可交互提示

    ); 2.2 Snackbar的make()后面连缀调用setAction()来设置一个动作 (两个参数:一参为bar栏右侧点击交互显示内容,二参为重写onClick()的OnClickListener...可以看到,这里调用了Snackbar的make()方法来创建一个Snackbar对象, make()方法的 第一个参数需要传人一个View,只要是当前界面布局的任意一个View都可以,Snackbar...会使用 这个View来自动查找最外层的布局,用于展示Snackbar。...事实上,CoordinatorLayout可以监听其所有子控件的各种事件,然后自动帮助我们做出最为合理的响应。...举个简单的例子,刚才弹出的Snackbar提示将悬浮按钮遮挡住了, 而如果我们能让CoordinatorLayout监听到Snackbar的弹出事件, 那么它会自动将内部的FloatingActionButton

    1.8K30
    领券