使用NestedScrollView时偶尔出现底部显示不全

在使用material-design中新控件时,同时使用CoordinatorLayout,顶部放一个appbar,接着下面放nestedscrollview,并且使用behavior,偶尔会出现nestedscollview中内容显示不全,底部拉不出来

正常情况

错误情况

上面放了两张图片,上面是正常情况下的显示,下面是出错的情况

这种拉不出来的bug不能100%重现,有时出现有时不出现

一开始以为是我sony z3的问题,z3有一排虚拟按键,可是在一加三上这个问题又重现,一加三并没有虚拟按键

下面贴上布局代码

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.CoordinatorLayout

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="wrap_content"

tools:context="com.setting.AboutusFragment">

<android.support.design.widget.AppBarLayout

android:fitsSystemWindows="true"

android:layout_width="match_parent"

android:layout_height="56dp">

<LinearLayout

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal">

<ImageView

android:id="@+id/about_back"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:padding="16dp"

android:src="@mipmap/back_icon"/>

<TextView

style="@style/tv20white"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:layout_marginLeft="20dp"

android:text="关于我们"/>

</LinearLayout>

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

<android.support.v4.widget.NestedScrollView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@color/White"

app:layout_behavior="@string/appbar_scrolling_view_behavior">

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical">

<ImageView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:layout_marginBottom="26dp"

android:layout_marginTop="30dp"/>

<TextView

android:id="@+id/about_about"

style="@style/content16sp54"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:lineSpacingMultiplier="1.25"

android:paddingLeft="16dp"

android:paddingRight="16dp"

android:text="Android 提供了一个内容丰富的应用框架,支持您在 Java 语言环境中为移动 设备开发创新应用和游戏。在左侧导航窗格列出的文档中,提供了有关如何使用各种 Android API 开发应用的详细信息。

如果您是 Android 应用开发新手,则需了解以下有关 Android 应用框架的基本概念,这一点至关重要:

应用提供多个入口点

Android 应用都是将各种可单独调用的不同组件加以组合开发而成。例如,组件可以是为用户界面提供一个屏幕的单个“Activity”,也可以是在后台独立执行工作的“服务”。

您可以使用 intent 从一个组件启动另一个组件。甚至,您还可以启动不同应用中的组件,例如,启动地图应用中的 Activity 以显示地址。此模式可为单个应用提供多个入口点,并使任何应用均能够像用户“默认设置”一样处理其他应用可能调用的操作。

应用可适应不同的设备

Android 提供了一个自适应应用框架,可用以为不同的设备配置提供独特的资源。例如,您可以针对不同的屏幕尺寸创建不同的 XML 布局文件,系统将根据当前设备的屏幕尺寸确定要应用的布局。

如有任何应用功能需要相机等特定的硬件,则可在运行时查询设备功能的可用性。如有必要,您还可以声明您的应用所必需的功能,使 Google Play 商店等应用市场不得在不支持这些功能的设备上安装您的应用。"/>

<TextView

android:layout_marginTop="20dp"

style="@style/styleline"/>

<TextView

android:id="@+id/about_copyright"

style="@style/content16sp37"

android:text="应用可适应不同的设备

Android 提供了一个自适应应用框架"

android:paddingTop="20dp"

android:paddingBottom="20dp"

android:gravity="center_horizontal"

android:lineSpacingMultiplier="1.25"

android:layout_gravity="center_horizontal"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

</LinearLayout>

</android.support.v4.widget.NestedScrollView>

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

不知道有没有其他人也遇到过类似的问题,coordinatorlayout,nestedscroollview,linelayout中高度都调成wrap_content也都试过了,可是依然无效

回答:

昨天重新检查的时候无意间把fitsSystemWindows="true"加到appbar里面,然后发现在appbar下面多出来一个padding,之后尝试着把fitsystemwindows移动到了coordinator里面,padding消失了,底部也可以正常显示

关于fitsystemwindows这个属性,注解是说会根据他是否设置一个padding值,但是其中具体的原理看不是很懂,
之前我项目中一直有一个bug改不出来,也不知道为什么会出现,在尝试之后发现也是fitsystemwindows导致的,
具体情况可以看我的笔记

如果有好的关于fitsystemwindows的文章,也欢迎大家给我推荐

以上是 使用NestedScrollView时偶尔出现底部显示不全 的全部内容, 来源链接: utcz.com/p/178580.html

回到顶部