RelativeLayout 中的 ViewPager 和 ViewPagerIndicator 使 RelativeLayout 扩展到整个屏幕

ViewPager and ViewPagerIndicator inside RelativeLayout making RelativeLayout expand through whole screen

这就是给我带来很多问题的原因:

<RelativeLayout
    android:id="@+id/galleryLayout"
    android:layout_width="match_parent"
    android:layout_height="180dp"
    android:background="@color/white">

        <android.support.v4.view.ViewPager
            android:id="@+id/imageViewPager"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true" />

        <com.viewpagerindicator.CirclePageIndicator
            android:id="@+id/circlePageIndicator"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:padding="@dimen/padding_middle"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"/>

</RelativeLayout>

现在这段代码 有点像 可以正常工作,因为我已将 RelativeLayout 的高度设置为 180dp,但我不想这样。我希望根据 ViewPager 的 child.

整个高度

如果我将RelativeLayout的高度设置为WrapContent,正好有2个问题。

问题 1

ViewPager 将扩展到整个屏幕。它只是不尊重它的 wrap_content 高度属性。但我已经用 this answer 部分解决了这个问题。如果有更好的解决方案,我仍然会很感激。

问题2

我想在它的底部有 CirclePageIndicator parent (RelativeLayout) 所以我添加了属性 layout_alignParentBottom="true" 但是现在正因为如此,RelativeLayout 将出于某种原因扩展到整个屏幕。

所以我想要的是一个环绕 ViewPager 的 RelativeLayout,它环绕它 child。 child 是从网上下载的,所以我不能 pre-set。在那个 RelativeLayout 的底部,我想要一个 ViewPagerIndicator。

至于问题 1 您正确解决了问题,ViewPager 默认情况下不会包装其 children。

至于第二个问题,这是正常的RelativeLayout行为。如果您将其 height 设置为 wrap_content 并添加两个 children,一个 layout_alignParentTop="true",第二个 layout_alignParentBottom="true",它们将拉伸您的 layout height-wise.

你应该做的是:问问自己是否真的需要RelativeLayout。如果您提供了您的整个布局,我认为不需要 RelativeLayout(它很昂贵)。垂直 LinearLayout 就可以了。如果您确定确实需要 RelativeLayout,请尝试将 Indicator's 规则从 layout_alignParentBottom="true" 更改为 android:layout_below="@+id/imageViewPager"