我正在设置一个标签式Android应用。为此,我开始使用Android Studio创建的活动选项卡式活动,其样式设置为操作栏选项卡(使用ViewPager)。
生成的主要活动有一个CoordinatorLayout
,其中包含AppBarLayout
和ViewPager
(浮动按钮对于这种情况不感兴趣)。
由于ViewPager
的高度为match_parent
,我想知道它是否会超出屏幕底部。为了测试它,我在TextView
内部使用的片段中添加了ViewPager
并将其与底部对齐。
运行应用时,我看不到额外的TextView
。将ViewPager
的高度更改为400dp后,TextView
变为可见。
所以我的假设是ViewPager
获得与父级相同的高度,但AppBar
占据了顶部的空间,因此ViewPager
向下移动。现在应该如何正确设置ViewPager
的高度,以便它占用AppBar
下的所有剩余空间?唯一可能的高度值是match_parent
,wrap_content
和固定值。
我希望有一个“仅限xml”的解决方案。
为了完整性,这里是主要活动的布局
<?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/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="nl.ravelin.so_tabs.MainActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/appbar_padding_top"
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.v7.widget.Toolbar>
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>
和主要片段
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="nl.ravelin.so_tabs.MainActivity$PlaceholderFragment">
<TextView
android:id="@+id/section_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="How low can you go."/>
</RelativeLayout>
答案 0 :(得分:3)
所以我的假设是ViewPager获得与父级相同的高度,但AppBar占据了顶部的空间,因此ViewPager向下移动。
你是完全正确的。这对我来说也有点意外。
你有几个选择。
您可以将底部锚定视图移动到视图寻呼机外部,并将其锚定到CoordinatorLayout
的底部。这样,无论视图寻呼机内部的滚动位置如何,它都将始终可见。
执行此操作时,您需要使用下边距偏移视图寻呼机,以便在内容向上滚动时,它完全可见:
<android.support.v4.view.ViewPager
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="?attr/actionBarSize"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:text="How low can you go."/>
这样做的缺点是内容不随视图寻呼机移动。我使用此方法将按钮锚定到适用于整个屏幕的底部。
如果该内容绝对需要一直显示并分页,那么滚动的应用栏可能不适合您的UI。将CoordinatorLayout
更改为LinearLayout
并使用Toolbar
而不使用AppBarLayout
。