TabLayout + AppBarLayout的片段布局太高

时间:2019-01-10 20:34:08

标签: android android-viewpager android-toolbar android-tablayout

我一直在努力寻找Google和stackoverflow上的解决方案。认为这是我应用程序中的一个小错误,但最终使项目变成空项目,并且也可以重现此错误。只需运行新项目,然后选择导航方式为“操作栏选项卡(带有ViewPager)”的“贴标签的活动”

然后尝试将任何小部件放在片段布局的底部。我这样做是通过修改fragment_main.xml并添加:

android:layout_height="match_parent"
android:gravity="bottom"
android:textAlignment="center"

所以整个布局是:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:id="@+id/constraintLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity$PlaceholderFragment">

    <TextView
        android:id="@+id/section_label"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="@dimen/activity_vertical_margin"
        android:gravity="bottom"
        android:text="aaaaaaa"
        android:textAlignment="center"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="@+id/constraintLayout"
        tools:layout_constraintLeft_creator="1"
        tools:layout_constraintTop_creator="1" />

</android.support.constraint.ConstraintLayout>

在设计模式下,一切看起来都很好: enter image description here

但是当您运行应用程序时:

enter image description here

只有在滑动操作栏以将其隐藏时,您才会看到文本:

enter image description here

因此无法将小部件设置在选项卡片段的底部,甚至无法将某些列表/图片与父级的高度匹配,因为底部边缘始终位于导航栏下方。

我找到的解决方法在这里: ViewPager with Toolbar and TabLayout has wrong height

第一个方法是将AppBarLayoutViewPager放在LinearLayout之间,但是当滚动ViewPager的内容时,我失去了隐藏操作栏功能。第二个是在android:paddingBottom="?attr/actionBarSize"中添加ViewPager,但是当我隐藏操作栏时会有一个空白。真的没有解决办法吗?

1 个答案:

答案 0 :(得分:0)

我认为这是预期的行为,因为向上滚动时ActionBar被隐藏了。在设计模式下,可以显示文本,因为它不显示TabLayout。但是,当您启动该应用程序时,它将使TabLayout膨胀,并且该片段将位于其下方。因此,这并不是说片段正在扩大或给您错误的高度。

想象一下,放置一个具有与可见字段高度匹配的ImageView(从TabLayout下方到导航菜单上方)。当您从此处隐藏操作栏时,由于没有内容可以填充隐藏的操作栏的空间,因此它在底部会有一个间隙,除非您在向上滚动时拉伸ImageView,否则将导致有线拉伸图像:/ < / p>

我能想到的一种可能的解决方案是,如果要在片段的底部添加视图,则将操作栏填充设置为该视图,并在滚动屏幕时根据需要调整填充滚动偏移量,以便我可以始终位于底部。