问题描述
我将CoordinatorLayout与ViewPager和ViewPager结合使用时遇到问题:
I have a problem using CoordinatorLayout in conjunction with ViewPager and the ViewPager:
布局无法正确调整大小.假设求解的高度包括制表符高度.因此,当我滚动到底部时,会看到以下内容:
the layout does not resize correctly. Supose that the height solved includes tabs height. So when I scroll to bottom i see this:
主要布局代码:
<?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:id="@+id/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".activities.MainActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<include layout="@layout/content_main" />
</FrameLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
标签布局代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".activities.MainActivity"
tools:showIn="@layout/activity_main"
android:orientation="vertical">
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<FrameLayout
android:id="@+id/regularLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</FrameLayout>
</LinearLayout>
子布局代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
android:clickable="false"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_gravity="bottom"
android:layout_marginRight="85dp"
android:src="@drawable/ic_android" />
</RelativeLayout>
有什么主意吗?我看到了几条帖子,但找不到问题,我需要孩子的身高必须是screenHeight-actionBarHeight-TabBatHeight
Any idea? I saw several posts but could not find the problem, I need that the height of child must be screenHeight - actionBarHeight - TabBatHeight
推荐答案
在使用CoordinatorLayout + AppBarLayout + ViewPager时需要考虑以下几点:
There are several things to consider when using CoordinatorLayout + AppBarLayout + ViewPager:
- 将ViewPager放置在内部
CoordinatorLayout
,但外部AppbarLayout
- 仅
ViewPager
应将其行为设置为app:layout_behavior="@string/appbar_scrolling_view_behavior"
放置 - 将
TabLayout
放置在AppBarLayout
内 - 您还可以在
AppBarLayout
直接子级 上设置滚动标志在两个 - 设置
android:fitsSystemWindows="true"
AppBarLayout
,以便您可以将稀松布的颜色应用于状态栏
CoordinatorLayout
&上同时- Place ViewPager Inside
CoordinatorLayout
but OutsideAppbarLayout
- Only
ViewPager
should set its behavior toapp:layout_behavior="@string/appbar_scrolling_view_behavior"
put - Place
TabLayout
insideAppBarLayout
- You can also set scroll flag on the
AppBarLayout
direct children - set
android:fitsSystemWindows="true"
on bothCoordinatorLayout
&AppBarLayout
so your scrim color can be applied to status bar
所以您的最终布局可能应该是这样的(它不包括您的子布局,因为我想这是您的ViewPager页面):
so your final layout probably should looks like this (it doesn't include your child layout because I guess it was your ViewPager Page) :
<?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:id="@+id/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay"
android:fitsSystemWindows="true">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/AppTheme.PopupOverlay" />
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
以下是您绝对应该查看的一些资源:
And here are several resource you should definitely check out:
- Handling Scrolls with CoordinatorLayout
- Introduction toCoordinatorLayout on android
- Great sample project by ChrisBanes
这篇关于CoordinatorLayout + AppbarLayout + Viewpager不能调整子布局的大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!