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

将fitsSystemWindows设置为true时,CollapsingToolbarLayout内部的ViewGroup会显示额外的底部填充

fitsSystemWindows 是一个用于 Android 开发中的属性,通常用于控制布局如何与系统窗口(如状态栏和导航栏)进行交互。当设置为 true 时,该布局会尝试为系统窗口留出空间,这通常用于实现沉浸式状态栏的效果。

基础概念

  • fitsSystemWindows: 这是一个布尔值属性,当设置为 true 时,布局会考虑系统窗口的尺寸,并为其留出空间。
  • CollapsingToolbarLayout: 这是 Android 支持库中的一个布局组件,用于实现可折叠的工具栏效果,常见于 Material Design 风格的应用中。

相关优势

  • 沉浸式体验: 通过正确设置 fitsSystemWindows,可以实现应用内容与系统窗口的无缝融合,提供更好的用户体验。
  • 灵活的布局调整: 根据系统窗口的变化,动态调整布局,确保内容始终可见且布局美观。

类型与应用场景

  • 类型: 这是一个布局属性,适用于所有需要与系统窗口进行交互的布局。
  • 应用场景: 主要用于实现沉浸式状态栏、导航栏以及与这些系统窗口紧密相关的布局调整。

问题与解决方案

当你将 fitsSystemWindows 设置为 true 时,CollapsingToolbarLayout 内部的 ViewGroup 可能会出现额外的底部填充。这是因为系统窗口(如导航栏)占据了部分屏幕空间,而布局试图适应这种变化。

原因

  • 系统窗口(如导航栏)占据了一部分屏幕空间。
  • fitsSystemWindows 属性导致布局尝试为这些系统窗口留出空间。

解决方案

  1. 调整布局参数: 仔细检查并调整 CollapsingToolbarLayout 及其内部视图的布局参数,确保它们正确地适应屏幕尺寸和系统窗口的变化。
  2. 使用 CoordinatorLayout: 确保 CollapsingToolbarLayoutCoordinatorLayout 的子视图,并正确配置它们之间的交互。
  3. 动态调整填充: 在代码中动态获取系统窗口的尺寸,并相应地调整布局的填充。

示例代码

以下是一个简单的示例,展示如何在代码中动态调整填充:

代码语言:txt
复制
// 获取系统窗口的尺寸
int statusBarHeight = getStatusBarHeight(this);
int navigationBarHeight = getNavigationBarHeight(this);

// 调整 CollapsingToolbarLayout 内部的填充
ViewGroup.LayoutParams params = collapsingToolbarLayout.getLayoutParams();
params.bottomMargin = navigationBarHeight;
collapsingToolbarLayout.setLayoutParams(params);

// 辅助方法:获取状态栏高度
public static int getStatusBarHeight(Context context) {
    int result = 0;
    int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = context.getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

// 辅助方法:获取导航栏高度(注意:此方法可能不适用于所有设备)
public static int getNavigationBarHeight(Context context) {
    int result = 0;
    if (hasNavBar(context)) {
        Resources res = context.getResources();
        int resourceId = res.getIdentifier("navigation_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = res.getDimensionPixelSize(resourceId);
        }
    }
    return result;
}

// 辅助方法:检查设备是否有导航栏
public static boolean hasNavBar(Context context) {
    boolean hasNavBar = false;
    Resources rs = context.getResources();
    int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");
    if (id != 0) {
        hasNavBar = rs.getBoolean(id);
    }
    try {
        Class<?> systemPropertiesClass = Class.forName("android.os.SystemProperties");
        Method m = systemPropertiesClass.getMethod("get", String.class);
        String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys");
        if ("1".equals(navBarOverride)) {
            hasNavBar = false;
        } else if ("0".equals(navBarOverride)) {
            hasNavBar = true;
        }
    } catch (Exception e) {
        // 忽略异常
    }
    return hasNavBar;
}

参考链接

请注意,上述代码中的 getNavigationBarHeighthasNavBar 方法可能需要根据具体设备和 Android 版本进行调整。在实际应用中,建议进行充分的测试以确保兼容性。

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

相关·内容

Material Design 实战 之 第六弹 —— 可折叠式标题栏(CollapsingToolbarLayout) & 系统差异型功能实现(充分利用系统状态栏空间)

充分利用系统状态栏空间(系统差异型) 2.1 控件(这里是ImageView)布局结构中所有父布局 android:fitsSystemWindows属性指定成true,...接着还可以在界面上再添加一个悬浮按钮, 当然并不是必需,只是如果加的话,我们免费获得一些额外动画效果。...FloatingActionButton中, app:layou_anchor属性(anchor n.锚状物)指定了一个锚点,这里锚点设置AppBarLayout,这样悬浮按钮就会出现在水果标题栏区域内..., 控件android:fitsSystemWindows属性指定成true,就表示该控件会出现在系统状态栏里。...这里除了android:fitsSystemWindows属性设置好,还必须在程序主题中将状态栏颜色指定成透明色。

2.3K40
  • 再学一遍android:fitsSystemWindows属性

    对于android:fitsSystemWindows这个属性你是否感觉又熟悉又陌生呢? 熟悉是因为大概知道它可以用来实现沉浸式状态栏效果,陌生是因为对它好像又不够了解,这个属性经常不灵。...我相信按照绝大多数人美好设想,android:fitsSystemWindows属性就应该像是一个开关一样,设置true就可以打开沉浸式状态栏效果,设置成false就可以关闭沉浸式状态栏效果。...在Google提供诸多布局当中,并不是只有CoordinatorLayout处理android:fitsSystemWindows属性,像CollapsingToolbarLayout、DrawerLayout...CollapsingToolbarLayout,并且给CollapsingToolbarLayout设置了android:fitsSystemWindows属性,这样CollapsingToolbarLayout...接着我们给ImageView同样设置了android:fitsSystemWindows属性,如此一来,就可以让图片显示在状态栏背后了。

    1.2K50

    CoordinatorLayout使用全解析

    例如,如果视图只有底部25%显示,它将折叠。相反,如果它底部75%可见,那么它将完全展开。...CollapsingToolbarLayout可以通过app:contentScrim设置折叠工具栏布局颜色,通过app:statusBarScrim设置折叠状态栏颜色。...CollapsingToolbarLayout子布局有3种折叠模式(Toolbar中设置app:layout_collapseMode) off:默认属性,布局正常显示,无折叠行为。...pin:CollapsingToolbarLayout折叠后,此布局固定在顶部。 parallax:CollapsingToolbarLayout折叠,此布局也会有视差折叠效果。...当CollapsingToolbarLayout子布局设置了parallax模式,我们还可以通过app:layout_collapseParallaxMultiplier设置视差滚动因子,值:0~

    2.1K20

    使用CoordinatorLayout打造各种炫酷效果

    版权声明:本文博主原创文章,未经博主允许不得转载。...(当这个View到达 CollapsingToolbarLayout底部时候,这个View 将会被放置,即代替整个CollapsingToolbarLayout) 我们有两种方法可以设置这个常量,...底部时候,代替整个CollapsingToolbarLayout显示 接着说明TabLayout变化 从前面的描述我们已经知道当 没有指定app:layout_scrollFlags时候,最终...TabLayout静止,不会随着滑动 时候消失不见 拓展 如果我们仅仅 改变CollapsingToolbarLayoutapp:layout_scrollFlags=”scroll|exitUntilCollapsed...- 对于AppBarLayout,我们主要 讲解了这个属性app:layout_scrollFlags,设置不同 属性我们可以在滚动时候显示不同 效果 - 对于CollapsingToolbarLayout

    5K10

    高仿支付宝9.9.2版本生活模块界面来讲解CoordinatorLayout,AppBarLayout,CollapsingToolbarLayout

    内部子View通过在布局中加app:layout_scrollFlags设置执行动作。...最后snap这是属性是子View不会存在局部显示情况,滚动Child View部分高度,当我们松开手指,Child View要么向上全部滚出屏幕,要么向下全部滚进屏幕。...3.CollapsingToolbarLayout 是用来对Toolbar进行再次包装ViewGroup,主要是用于实现折叠App Bar效果。...CollapsingToolbarLayout只要有这方面: 1.title展开是最大,然后随着收缩越来越少,直到屏幕顶部,通过app:title设置title,不然就默认。...当verticalOffset=0时候即使整个展开是时候要做就是显示显示,隐藏要隐藏设置,在设置透明度,同理当verticalOffset等于appBarLayout.getTotalScrollRange

    1.1K20

    Android view滑动悬浮固定效果实现代码示例

    1.背景 在项目开发过程中,有时候碰到这样需求:在滑动过程中,在某时要将子view固定在顶部(常见界面中tab在滑动到顶部时候进行固定)。...4.扩展 a.关于CollapsingToolbarLayout中子view排列顺序对显示结果造成影响 如图: ?...推测—— CollapsingToolbarLayout中以上三种view不同排序剖面展示效果: 顺序:Toolbar—— ImageView—— TabLayout(设置layout_gravity...(因此,1.在画布下内容就无法显示出来;2.无法覆盖画布内容就显示画布默认样式) 所以,如果不想要有视差效果的话,那么就将Toolbar与TabLayout高度设置一致。...(这样也避免了:在CollapsingToolbarLayout中,因为视图折叠覆盖问题,导致整个ImageView被TabLayout覆盖一部分而显示不完全问题。)

    86710

    CoordinatorLayout与滚动处理

    目前这个框架提供了几种不用写动画代码就能工作方法,这些效果包括: 让浮动操作按钮上下滑动,Snackbar留出空间 ? 扩展或者缩小Toolbar或者头部,让主内容区域有更多空间。 ?...floatingActionButton弹出Snackbar,fab自动上移效果,app:layout_behavior自定义效果,当下滑,fab消失,上滑fab显示,详情请查看本人博客 Floating...通常,我们我们都是设置Toolbartitle,而现在,我们需要把title设置CollapsingToolBarLayout上,而不是Toolbar。...同时在用户滚动时候title高度也随着改变。 ? 为了制造出这种效果,我们添加一个定义了app:layout_collapseMode=”parallax” 属性ImageView。...当滚动发生时候,CoordinatorLayout尝试触发那些声明了依赖子view。

    77920

    CollapsingToolbarLayout使用

    ,直至高度缩Toolbar高度并成为Toolbar背景色;向下滑动列表,Header部分逐渐显示。...关于CollapsingToolbarLayout属性在官网上可以查到,这里我只介绍案例中我们常用几个属性:title标题,布局展开放大显示在图片底部,布局折叠缩小显示在Toolbar左侧。...attr/colorPrimary",即显示Toolbar颜色,应用主题色;layout_collapseMode折叠模式,设置其他控件滚动自身交互行为,有两种取值:parallax,折叠视差效果...当设置1.0,滚动列表图片不会折叠移动; 代码实现: 关于CoordinatorLayout作为根布局容器如何协调子控件之间交互行为,可以参考上一篇文章,这里我介绍一下本例中几个新注意点。...表示控件向上折叠退出并以最小高度停留在顶部;前面介绍CollapsingToolbarLayout属性介绍到了statusBarScrim使用,其实也可以通过android:fitsSystemWindows

    2.5K60

    细说 AppbarLayout,如何理解可折叠 Toolbar 定制

    当 AppBarLayout 中内容要从 CoordinatorLayout 外面进入内部,我们用 enter 指代这种行为,对应手势就是向下滑动。...当 AppBarLayout 中内容从 CoordinatorLayout 内部向外部方向移动,我们用 exit 指代这种行为,对应手势是向上滑动。...Toolbar 先滑动,等到视图可见范围高度 collapsed 指定高度它会静止,等到 NestedScrollView 内容完全显示在 Toolbar 下方它再一起滑动,它动作是 3 段式...说是包裹 CollapsingToolbarLayout AppbarLayout 需要设置 fitsSystemWindows true。...Pinned position children 子类位置固定行为 这个很好理解, CollapsingToolbarLayout 中某个子 View 固定,无论是否存在滚动事件,只要设置 app:

    3K30

    第14章 使用Kotlin 进行 Android 开发(1)第14章 使用Kotlin 进行 Android 开发(1)

    最终运行效果如下 ? HelloWord.png 14.2 综合项目实战:开发一个电影指南应用程序 本节我们开发一个Android 应用程序, 列出流行/最高评级电影, 显示预告片和评论。...另外,它还生成一个本地视图缓存,当第一次使用属性,它将执行一个常规findViewById。但在下一次使用属性时候,视图将从缓存中恢复,因此访问速度更快。...setCustomAnimations(int enter, int exit) Fragment进入/退出设置指定动画资源。 commit() 提交事务。安排一个针对该事务提交。... Fragment 添加至 Activity 视图布局中有两种方式:一种是使用fragment标签加入,Fragment父视图应是一个ViewGroup;另一种使用代码动态加入,并将一个ViewGroup...由于平板比手机屏幕大多,因此平板上可以呈现更多内容,而 Fragment 可以实现同一视图布局在不同大小屏幕上显示不同效果, Fragment 加入到 Activity Layout 中,

    2.7K30

    Material Design之CollapsingToolbarLayout 相关属性和方法介绍

    设置边界距离 和 textview等效果一样 6.android.support.design:expandedTitleMarginBottom  底部margin距离 7.android.support.design...如果标题可用的话 显示标题文字    11.android.support.design:titleEnabled e.g. app:titleEnabled="true" Whether the...enterAlwaysCollapsed - 当你View已经设置minHeight属性又使用此标志,你View只能以最小高度进入,只有当滚动视图到达顶部才扩大到完整高度。...--layout_collapseMode (折叠模式) - 有两个值: pin - 设置这个模式,当CollapsingToolbarLayout完全收缩后,Toolbar...parallax - 设置这个模式,在内容滚动CollapsingToolbarLayoutView(比如ImageView)也可以同时滚动,实现视差滚动效果,通常和layout_collapseParallaxMultiplier

    94030

    NestedScrollView 嵌套 ListView 实现滑动折叠效果

    当我们引入RecyclerView时候,恰好是压死骆驼最后一根稻草,故不得不采用其他方案来代替RecyclerView 和 CollapsingToolbarLayout实现折叠效果。...android:fitsSystemWindows,经本人代码测试,表示CollapsingToolbarLayout上边界是否扩展到statusbar,这里如果想使用透明statusbar,这里更新下应该该布局根布局该属性...enterAlways - 实现quick return效果, 当向下移动,立即显示View(比如Toolbar). exitUntilCollapsed - 向上滚动收缩View,但可以固定Toolbar...enterAlwaysCollapsed - 当你View已经设置minHeight属性又使用此标志,你View只能以最小高度进入,只有当滚动视图到达顶部才扩大到完整高度。...解决方法在AppBarLayout添加 android:fitsSystemWindows="true"

    3.4K50

    android 设置标题栏背景颜色_状态栏菜单栏都在哪

    android:fitsSystemWindows=”true”属性就可以了,要不布局跑到状态栏和导航栏下面,与导航栏和状态栏重叠,这当然不是我们希望。...同一个Activity包含多个Fragment,如何实现不同fragment状态栏背景和文字颜色不一样 如下面的效果图: 就是设置了状态栏暗色后,还得设置回来,这其实主要靠下面两个flag...(0, 0, 0, CommonUtils.navigationHeight); 这行代码干什么用,因为我们这里首页和我页面,需要背景图片填充到状态栏,故不能使用android:fitsSystemWindows...带有底部导航栏手机底部导航按钮和navigationbar重叠 如下图所示: 全屏,由于视图布局会填充到状态栏和导航栏下方,如果不使用android:fitsSystemWindows=”true...上面对于版本判断,如果android版本大于4.4, 则让该布局显示出来,而版本低于4.4, 由于没有沉浸式状态栏效果,则不需要给界面设置占空布局。

    2.2K10

    全屏、沉浸式、fitSystemWindow使用及原理分析:全方位控制“沉浸式”实现

    可以这么理解:状态栏与导航栏拥有自己独立窗口,而且这两个窗口优先级较高,悬浮在所有窗口之上,可以把系统自身状态栏与导航栏看做全透明,之所有会有背景颜色,是因为下层显示界面在被覆盖区域添加了颜色...--关键点1 ,可以看到,根布局根据消耗状况,来评估到底底部,右边部分margin多少,并设置进去--> if (mContentRoot !...会选择性进入设置了fitSystemWindowView,即设置fitsSystemWindows: android:fitsSystemWindows="true" 并回调fitSystemWindows...有一个小点需要注意下,那就是Theme中也支持fitsSystemWindows设置 true 默认情况下上属性...false,如果设置True,就会被第一个未设置fitsSystemWindowsView消费掉。

    5.6K40

    Android - 仿网易云音乐歌单详情页

    : 实现思路: 1、Activity设置自定义Shared Element切换动画 2、透明状态栏(透明Toolbar,使背景图上移) 3、Toolbar底部增加和背景一样高斯模糊图,并上移图片(为了使背景图底部作为...其中内容根布局不要设置android:fitsSystemWindows="true",这样额外添加一个状态栏。...其中StatusBarUtil,是一个Android App 设置状态栏工具类。...3、Toolbar背景图 仔细分析后发现网易云音乐Toolbar背景其实显示是高斯模糊图底部,所以这里基本套路是Toolbar是透明,后面背景图取是高斯模糊图底部一部分。 ?...Toolbar背景图 监听图片显示,在显示之后将其设置透明色,然后在滑动时候渐变。

    1.4K10

    通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout

    Scroll: 表示向下滚动,这个View会被滚出屏幕范围直到隐藏. enterAlways: 表示向上滚动,这个View随着滚动手势出现,直到恢复原来位置. enterAlwaysCollapsed...CollapsingToolbarLayout子View中可以设置这两个属性 1、ayout_collapseMode (折叠模式) - 有两个值: pin - 设置这个模式,当CollapsingToolbarLayout...parallax - 设置这个模式,在内容滚动CollapsingToolbarLayoutView(比如ImageView)也可以同时滚动,实现视差滚动效果,通常和layout_collapseParallaxMultiplier...(还没有收缩)title向左填充距离 app:expandedTitleMarginEnd 这个同理是收缩结束向左填空距离 其他就不一一介绍了,具体去查看API文档即可获知。...我在做这里时候遇到一个问题,那就是CollapsingToolbarLayoutTitle问题,一般默认是显示,即使你不写,它也有一个默认值一直显示在那里,等折叠收缩完时候,停留在标题工具栏上

    2.3K90
    领券