CoordinatorLayout中设置layout_behavior的布局无法垂直居中问题解决

简单分析一下CoordinatorLayout的Behavior机制以及其中方法的作用 Behavior从哪来Google 推出 Material Design 后,提供了Support Library ,而Behavior机制是其中 CoordinatorLayout的一种使其子View通过Drag、Fling或Gestures 等方式实现子View的各种交互效果而提供的一种实现方式。Behavior是什么见名知意,翻译过来就是行为的意思,对,简单来说就是控制一些子View的交互行... 阅读详情

           这两天项目中需要实现一个页面,大致的布局是顶部一块区域是一部分内容,然后下面是一个title条,这个title条下面是一个列表,因为列表的数据可能有很多,所以这个页面是需要整体进行滑动的,因为只让下面的listview滚动的话,那么下面的展示区域就太小了,因为我们的listview的Item内容也比较多,但是说如果是scrollview嵌套listview,那么那个title条也会被滚动出屏幕,但是我们的那个title条里面还有触发下面listview删除、修改的功能,所以不能滚动出屏幕,需要有一个吸顶的效果。

          考虑过用stickylistheaderslistview,但是未免太麻烦了,所以我们自然而然的选择了Material Design中很有滚动效果的CoordinatorLayout了,它也很擅长做这类滚动至屏幕顶端然后停止滚动的事情。接下来就跟以前似得开始写代码了,xml布局如下:

                <android.support.design.widget.CoordinatorLayout
                    android:overScrollMode="never"
                    android:layout_alignParentTop="true"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                    <android.support.design.widget.AppBarLayout
                        android:overScrollMode="never"
                        app:elevation = "0dp"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">

                        <android.support.design.widget.CollapsingToolbarLayout
                            android:id="@+id/collapsingToolbarLayout"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:overScrollMode="never"
                            app:layout_scrollFlags="scroll|exitUntilCollapsed">

                            <LinearLayout
                                android:id="@+id/firstLl"
                                android:orientation="vertical"
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content">

                                <TextView
                                    android:layout_width="match_parent"
                                    android:layout_height="49dip"
                                    android:background="@color/color_ffffff"
                                    android:drawableLeft="@drawable/user_details_icon_basic"
                                    android:drawablePadding="5dip"
                                    android:gravity="center_vertical"
                                    android:paddingLeft="16dip"
                                    android:text="a信息"
                                    android:textColor="@color/color_3399ff"
                                    android:textSize="15sp"/>

                                <View style="@style/view_line"/>

                                <RelativeLayout
                                    android:layout_width="match_parent"
                                    android:layout_height="wrap_content"
                                    android:background="@color/color_ffffff">

                                    <TextView
                                        style="@style/style_basicinfo"
                                        android:layout_alignParentLeft="true"
                                        android:text="1字段"/>

                                    <TextView
                                        style="@style/style_basicinfo"
                                        android:layout_alignParentRight="true"/>

                                </RelativeLayout>

                                <RelativeLayout
                                    android:layout_width="match_parent"
                                    android:layout_height="wrap_content"
                                    android:background="@color/color_ffffff">

                                    <TextView
                                        style="@style/style_basicinfo"
                                        android:layout_alignParentLeft="true"
                                        android:text="2字段"/>

                                    <TextView
                                        style="@style/style_basicinfo"
                                        android:textColor="@color/color_3399ff"
                                        android:layout_alignParentRight="true"/>

                                </RelativeLayout>

                                <RelativeLayout
                                    android:layout_width="match_parent"
                                    android:layout_height="wrap_content"
                                    android:background="@color/color_ffffff">

                                    <TextView
                                        style="@style/style_basicinfo"
                                        android:layout_alignParentLeft="true"
                                        android:text="3字段"/>

                                    <TextView
                                        style="@style/style_basicinfo"
                                        android:layout_alignParentRight="true"/>

                                </RelativeLayout>

                                <LinearLayout
                                    android:paddingTop="15dip"
                                    android:background="@color/color_ffffff"
                                    android:layout_width="match_parent"
                                    android:layout_height="wrap_content">
                                    <View
                                        style="@style/view_line"/>
                                </LinearLayout>

                                <View
                                    android:background="@color/color_e5e5e5"
                                    android:layout_width="match_parent"
                                    android:layout_height="16dip"/>
                            </LinearLayout>
                        </android.support.design.widget.CollapsingToolbarLayout>

                    </android.support.design.widget.AppBarLayout>

                    <LinearLayout
                        app:layout_behavior="@string/appbar_scrolling_view_behavior"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical">

                        <RelativeLayout
                            android:id="@+id/secondRl"
                            android:background="@color/color_ffffff"
                            android:paddingRight="16dip"
                            android:layout_width="match_parent"
                            android:layout_height="49dip">

                            <TextView
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_alignParentLeft="true"
                                android:drawableLeft="@drawable/user_details_icon_car"
                                android:drawablePadding="5dip"
                                android:gravity="center_vertical"
                                android:layout_centerVertical="true"
                                android:paddingLeft="16dip"
                                android:text="b信息"
                                android:textColor="@color/color_3399ff"
                                android:textSize="15sp"/>

                            <ImageView
                                android:layout_alignParentRight="true"
                                android:layout_centerVertical="true"
                                android:src="@drawable/received_details_btn_add"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"/>

                            <ImageView
                                android:layout_centerVertical="true"
                                android:layout_toLeftOf="@+id/addCarIv"
                                android:layout_marginRight="15dip"
                                android:src="@drawable/received_details_btn_edit"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"/>

                            <ImageView
                                android:visibility="gone"
                                android:layout_alignParentRight="true"
                                android:layout_centerVertical="true"
                                android:src="@drawable/received_details_btn_cancel"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"/>

                        </RelativeLayout>

                        <View
                            style="@style/view_line"/>

                        <LinearLayout
                            android:id="@+id/addLl"
                            android:gravity="center"
                            android:orientation="vertical"
                            android:background="@color/color_ffffff"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent">

                            <ImageView
                                android:src="@drawable/received_icon_details_empty"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"/>

                            <TextView
                                android:textSize="15sp"
                                android:text="此处有点空"
                                android:layout_marginTop="15dip"
                                android:textColor="@color/color_333333"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"/>

                            <TextView
                                android:textSize="18sp"
                                android:text="快来添加吧"
                                android:layout_marginTop="10dip"
                                android:textColor="@color/color_3399ff"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"/>

                        </LinearLayout>

                        <android.support.v7.widget.RecyclerView
                            android:id="@+id/carlistview"
                            android:overScrollMode="never"
                            android:background="@color/color_ffffff"
                            android:divider="@drawable/developcar_shape_divider"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"/>

                    </LinearLayout>

                </android.support.design.widget.CoordinatorLayout>
       上面可以看到id为firstLl的LinearLayout就是我们最初说的那个顶部布局,而id为secondRl的RelativeLayout则是我们说的那个需要吸顶的title条了,用过CoordinatorLayout的同学都知道,如果哪部分需要滑动出屏幕,那么那部分就需要写在CollapsingToolbarLayout布局中,而CollapsingToolbarLayout需要写在AppBarLayout中,同时为了能够使这部分内容能够滑动或者找到其在CoordinatorLayout中的位置,需要给这部分布局设置layout_scrollFlags属性,一般都设置值为scroll|exitUntilCollapsed因为我们也不需要特殊的渐变之类的效果,只要能滑出屏幕就好了,然后呢,需要滑动到顶部然后吸顶的布局我们需要设置layout_behavior属性,它告诉了CoordinatorLayout自己在滑动时候执行什么行为,为了制造吸顶需要设置其值为@string/appbar_scrolling_view_behavior就好了,然后运行一看貌似一切都很美好。

        其实我上面的布局还有一个id为addLl的LinearLayout,它是干嘛的呢?大家都知道列表没有数据的时候,总要给用户一些提示吧,它就是那个提示,其实里面就是一些文字以及图片了,但是是居中展示的,不过发现一个问题,就是当列表为空这个布局展示的时候,里面的内容并没有完全居中,只是水平方向上居中了,垂直方向上是在屏幕底部的,这是为啥呢?其实就是一个简单的布局,但是它是被放在CoordinatorLayout中的,后来经过多次调试,发现是layout_scrollFlags的scroll值捣的鬼,如果不设置这个scroll值,那么下面是可以居中的,但是顶部不能滑动了,如果设置的话,顶部是能够滑动了,但是下面不能居中了。所以最终的解决方式是动态设置这个layout_scrollFlags属性了,实例代码如下:

    //因为在CoordinatorLayout中如果给CollapsingToolbarLayout设置的ScrollFlags有scroll,那么下面设置layout_behavior的布局就无法垂直居中
    //但是不设置scroll属性,那么上面的有无法滑动然后吸顶。所以只能够动态设置了
    private void setCollapsingToolbarLayoutFlag(@AppBarLayout.LayoutParams.ScrollFlags int flags){
        AppBarLayout.LayoutParams layoutParams = (AppBarLayout.LayoutParams) binding.collapsingToolbarLayout.getLayoutParams();
        layoutParams.setScrollFlags(flags);
        binding.collapsingToolbarLayout.setLayoutParams(layoutParams);
    }
       上面的注释写的也很清楚,分别在下面的recyclerview有无数据时候动态调用这个setCollapsingToolbarLayoutFlag方法来动态设置了。这样子问题就算解决了。但是为啥不能居中还是没太搞明白,有知道的朋友还请多多指教。另外做的时候还发现一个问题,就是AppBarLayout会出现阴影,这个是android5.0之后material design自带的,但是在某些手机上不好看,我们就想要去掉,是要设置elevation属性,但是一定是app:elevation否则会无效哦,因为对于AppBarLayout这个算是自定义属性。

        好的,以上就是本次的全部内容,有问题欢迎批评指正。

RAP 通用搜索实战:用 CDS 注解打造 Fiori Elements 的一体化检索体验 RAP应用中的通用搜索优化实践:通过CDS注解实现高效模糊匹配 摘要:本文介绍了在SAP RAP应用中优化列表搜索体验的方法。通过CDS注解配置通用搜索功能,用户无需指定字段即可在多字段中模糊匹配数据。关键实现包括:1)使用@Search.searchable启用全局搜索;2)通过@Search.defaultSearchElement标记核心搜索字段;3)利用@Search.fuzzinessThreshold设置容错阈值(0.7-1.0)处理拼写错误;4)使用@Search.ranking优化结果排序。 阅读详情

相关推荐

T分布和T检验的理解,Python代码实现T检验的计算

每天学习一点,每天进步一点。 声明:本人所有的原创,都是自己在学习过程中的记录点滴,不一定都是对的,肯定也会有一些错误的想法。所以大家看一看就好,不可尽信。当然也欢迎指出。 T分布 定义,有来自标准正态分布的样本X ~ N(0,1),和来自卡方n分布的Y ~ X2(n), 那么有 Z= X/√(Y/n) 成为符合自由度为n的T分布 我们用Python代码画一下他的图形 # 给一个自由度,返回这个自由度的卡方分布 X²(n) def product(n): n = np.ceil(n).astype

PY_smallH的博客 8485

CoordinatorLayout详解及自定义Behavior

文章目录总览嵌套事件的分发TODO 总览   CoordinatorLayout-协调布局,用于实现自定义的嵌套滑动效果。RecyclerView(NestedScrollingChild2)会把滑动事件传递给CoordinatorLayout(NestedScrollingParent2),CoordinatorLayout最后会把滑动事件传递给其直接子View中设置了layout_behavi...

codingwz的博客 2222

Halcon窗体开发避坑指南:C#自定义控件实现7大图像交互功能

本文详细介绍了如何利用C#封装自定义Halcon控件,以解决原生HWindowControl功能不足的问题。通过实战代码,展示了如何实现图像按比例显示、鼠标拖动缩放、灰度值读取、图像保存、截图及图形叠加等七大核心交互功能,并重点剖析了内存管理、坐标转换等开发避坑要点,帮助开发者构建稳定可复用的机器视觉组件库。

weixin_29251131的博客 292

CoordinatorLayout 和layout_behavior属性的问题

首先 layout_behavior 必须在 CoordinatorLayout直接子控件才有效果。 layout_behavior 属性指定了一个布局行为。 可以为任何View添加一个Behavior。 Behavior是一系列回调。让你有机会以非侵入的为View添加动态的依赖布局,和处理父布局(CoordinatorLayout)滑动手势的机会。app:layout_scrollFlags

修一技之长 9208

如何点亮一颗sensor

要点亮一个sensor需要从,时钟、sensorI2C,供电,reset脚,mipi的配置几个方面一一确认。 reset脚拉高 给sensor的时钟有没有。(目前用到的常为24MHZ) 供电 查看sensor的数据手册,看有几个电源,用示波器量一下是否为手册规定的电压 比如:DVDD 数字电压: AVDD模拟电压 DOVDD芯片引脚出来的电压等为多少。 sensor的I2C能否抓到 将I2C的口对应上,用示波器量取i2c的波形。 检查有应答并且数据正确。读写地址是否正...

weixin_40787463的博客 3646

基于立创·天猛星MSPM0G3507的简易PID电机控制入门项目实战

本文详细介绍了基于立创·天猛星MSPM0G3507开发板的简易PID电机控制入门项目实战。从硬件选型、电路设计、PCB布局,到软件编程中的编码器读取、PID算法实现与调参,手把手教你完成一个带屏幕显示的电机定速与定距控制项目,是学习嵌入式开发和经典PID控制算法的绝佳实践。

weixin_42596011的博客 509

Coordinatorlayout嵌套滑动,自定义Behavior,听我来讲讲?

文章目录前言分析1、父容器子容器2、如何形成关联,谁是发起者3、NestedScrollingParent和NestedScrollingChild对应4、响应者示例 前言 嵌套滑动,顾名思义,嵌套嵌套就一定有父容器和子容器。如何能让子容器滑动能带动父容器(或父容器包含的其他子容器)滑动?什么样的子容器有这种能力?这种关联如何形成,以及被关联的容器如何响应,这种响应的逻辑在哪里定义? 相信你在对本文的阅读之后会有一定的了解 提示:以下是本篇文章正文内容 分析 1、父容器子容器 了解安卓开发的同学对这个概

让技术为我所用 3449

RK3568 Android12预置APK的三种模式详解:不可卸载、可卸载与永久删除

本文深入解析RK3568 Android12系统中APK预置的三种模式:不可卸载、可卸载与永久删除,详细介绍了每种模式的技术实现、应用场景及实战案例。针对Rockchip平台特性,提供从目录创建到系统编译的完整指南,帮助开发者根据产品需求选择最佳预置方案,并解决常见问题。

k8s6orchestrator的博客 967

CoordinatorLayout及自定义Behavior总结

CoordinatorLayout继承自viewgroup,但是使用类似于framLayout,有层次结构,后面的布局会覆盖在前面的布局之上。它可以监听子控件的各种事件,协调child之间的联动。CoordinatorLayout主要依靠Behavior来进行协调的。在CoordinatorLayout布局内部,每个child都必须带一个Behavior(其实不携带也可以,不携带就不能被协调),CoordinatorLayout就会根据每个child所携带的Behavior信息进行协调联动。 也就是说Coo

XBlithe的博客 1710

中断向量表配置不当引发Default_Handler死循环问题解析

本文深入解析STM32开发中因中断向量表配置不当导致的Default_Handler死循环问题。以STM32F407VET6为例,详细阐述中断向量表的工作原理、常见触发场景及系统化排查方法,并提供使用STM32CubeMX的正确姿势和手动配置的注意事项,帮助开发者快速定位并解决这一常见难题。

grafana6viz的博客 178

倍福CX9020(WINCE 7)控制器使用方法和操作

CX9020系列是倍福控制器中较为经济的,操作系统为Windows Embedded Compact 7(简称WINCE7或WINEC7),相对高端控制器(WINES7以上系统),操作系统古老而简洁,上位机软件的编写困难很多,本文是笔者在使用过程中摸索的流程,旨在为CX9020系列的新用户提供参考,也可供其他CE系统的控制器参考。本文中大部分截图采用倍福中国的培训文档,这是由于笔者是在流程走通后再写这篇文章,不想再恢复出厂设置走一遍截图。因笔者在写这篇文章时使用倍福控制器经验并不丰富,难免有纰漏,请读者批评

weixin_41883890的博客 4287

coordinatorlayout和behavior解析

CoordinatorLayoutCoordinateLayout已经出来有一段时间了,但是一直没有使用,最近项目开发中遇到一个效果,使用CoordinatorLayout来实现的,瞬间感觉到了他的强大之处,所以趁着空闲时间,自己深入了解总结了一下,不到之处,请多多包涵:官方API:https://developer.android.com/reference/android/support/des

野生程序员 1222

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

彻底解决Android滚动难题:Scrollable库的10种创新用法与实战指南

你是否还在为Android应用中的复杂滚动交互而头疼?尝试过多种方案却始终无法实现丝滑的滚动体验?本文将带你深入探索Scrollable库——这个仅有轻量级体积却能解决90%滚动场景的强大工具,从基础集成到高级定制,从常见问题到性能优化,一站式掌握Android滚动技术的核心奥秘。 读完本文你将获得: - Scrollable库的核心工作原理与架构解析 - 10种实战场景的完整实现代码(含列表、

gitblog_01199的博客 453

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

CoordinatorLayout 属性详解 和 Behavior 的使用

关于CoordinatorLayout 写过例子 点击打开链接链接是以前写的联动效果的例子,但是一直没有总结,其实CoordinatorLayout就是一个联动的布局动画效果,不用代码,就xml布局就能实现很多动画效果。 1.首先来个简单的,先看效果图上推时从1到2 toolbar消失 接着代码: xml version="1.0"

王项雨 的博客 7451

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android CoordinatorLayout behavior

之前CV了不少CoordinatorLayout 的 效果,很酷炫.今天打算深入一些 Demo_64Demo_64Demo_64Demo_64Demo_64Demo_64Demo_64Demo_64 https://www.jianshu.com/p/b987fad8fcb4 Behavior 知识点: 1.静态设置 自定义String 包名/类名 直接xml引入 app:l...

FlyPig_Vip的博客 382

1CoordinatorLayout与behavior入门

前言闲来无事,掏出AS熟练的new一个project,发现默认出来的activity点击之后有如下动画感觉很神奇,于是分析以下,这是怎么做到的? 这个activity的style是@style/AppTheme.NoActionBar,布局如下所示,这是目前android比较推崇的做法,基本理念就是脱离actionbar,在自己的布局里写toolbar,这样会提高更大的自由度,toolbar就变成

litefish的专栏 1444

CoordinatorLayout源码解析之初识Behavior

说在前面 CoordinatorLayout(下面简称CL)是Material Design中的明星控件了,学习它的源码不仅可以更好掌握这个控件的使用,而且可以更好地理解其他诸如AppbarLayout、FloatingActionButton等控件,还可以学习到一些有趣的思想。 可是当我像看其他ViewGroup(下面简称VG)的源码一样去看CL的源码的时候,我却发现了一个C

Qingzhaoi的博客 222

一个神奇的控件——Android CoordinatorLayout与Behavior使用指南

  CoordinatorLayout是support.design包中的控件,它可以说是Design库中最重要的控件。 本文通过模仿知乎介绍了自定义Behavior,通过模仿百度地图介绍了BottomSheetBehavior的使用。 1.CoordinatorLayout介绍 官方对CoordinatorLayout的描述是这样的: CoordinatorLayout is a super-...

weixin_33935777的博客 257

【安卓初步】CoordinatorLayout使用(一)

XML 一个简单的TextView,居中 <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmln...

lzx's blog 988

Android CoordinatorLayout之自定义Behavior

一、认识CoordinatorLayout CoordinatorLayout作为support:design库里的核心控件,在它出现之前,要实现View之间嵌套滑动等交互操作可不是件容易的事,复杂、难度大,基本绕不开View的事件机制,CoordinatorLayout很大程度上解决了这个痛点,方便我们实现各种炫酷的交互效果。 如果你还没用过CoordinatorLayout,可先了解它的基本用...

lucasey的博客 678

CoordinatorLayout使用详解

CoordinatorLayout是 com.android.support:design 包下用来协调子视图之间位置和动作的布局,遵循Material Design风格。CoordinatorLayout是一个增强版的FrameLayout,他拓展了Framelayout的功能,使得子视图之间可以更好地进行协调和交互。通过给Coordintorlayout的子视图指定Behavior,就可以实现它们之间的交互行为,这也是Coordinator的主要作用。AppBarLayout继承于Linearlayou

m0_74000465的博客 5740

CoordinatorLayout的使用(二)——自定义Behavior

 我们在上一篇文章CoordinatorLayout的使用(一)——简单使用中介绍了CoordinatorLayout的基本用法。为什么CoordinatorLayout能够这么方便的帮助我们非常简单的就实现炫酷的UI交互效果呢?这就不得不提到它的内部类Behavior了。其实CoordinatorLayout本身并没有做太多的事情,就是充当一个触摸事件桥梁的作用,所有的核心实现都是交给Behav...

VictorCatFish的博客 1481

如何应对Android面试官-> CoordinatorLayout详解,我用 Behavior 实现了手势跟随

CoordinatorLayout 原理深度解析,自定义 Behavior 实现高级特效,带你轻松应对Android面试官连环炮

IT_Android的博客 1162

安卓开发——布局方式

在安卓开发中,常见的布局方式包括:线性布局(LinearLayout),它按水平或垂直方向排列子视图;相对布局(RelativeLayout),允许子视图根据与其他视图的相对位置排列;约束布局(ConstraintLayout),通过对视图之间的约束关系提供灵活而高效的布局方式;框架布局(FrameLayout),用于将视图叠加在一起;网格布局(GridLayout),将子视图放置在一个可自定义的网格中;滚动视图(ScrollView),用于处理内容超出屏幕显示的情况;

weixin_64979174的博客 714

Android CoordinatorLayout Behavior

&nbsp; &nbsp; &nbsp; &nbsp;Behavior是Android Support Design库里面新增的布局概念,主要的作用是用来协调CoordinatorLayout里面直接Child Views之间交互行为的。 特别要注意的点是Behavior只能作用于CoordinatorLayout的直接Child View. &nbsp; &nbsp; &nbsp; ...

旧路 1101
上一篇: base64编码之去除特殊字符
下一篇: 关于推送push中notification的一点问题
和小胖
博客等级 码龄12年 8粉丝 42原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值