ViewStub忽略RelativeLayout中的alignParentBottom属性

时间:2015-05-12 15:41:12

标签: android

我在RelativeLayout中遇到了奇怪的ViewStub行为:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <ViewStub
        android:id="@+id/stub"
        android:inflatedId="@+id/stub"
        android:layout="@layout/some_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"/>

    <TextView
        android:id="@+id/text1"
        android:layout_width="match_parent"
        android:text="Some text"
        android:layout_height="wrap_content"/>

    <TextView
        android:layout_above="@id/stub"
        android:layout_width="match_parent"
        android:text="Some text2"
        android:layout_height="wrap_content"/>

</RelativeLayout>

当在上面展开布局时,它看起来像viewstub与父顶部对齐而不是底部。 我也尝试将ViewStub的高度和宽度设置为固定值(dp或px),但结果相同。那么它是某种Android错误还是我错过了ViewStub的东西?

例如,如果我用简单的视图替换ViewStub,并且相同的RelativeLayout保证所有视图都以适当的方式显示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="vertical"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">

        <View
            android:id="@+id/stub"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_alignParentBottom="true"/>

        <TextView
            android:id="@+id/text1"
            android:layout_width="match_parent"
            android:text="Some text"
            android:layout_height="wrap_content"/>

        <TextView
            android:layout_above="@id/stub"
            android:layout_width="match_parent"
            android:text="Some text2"
            android:layout_height="wrap_content"/>

    </RelativeLayout> 

修改: 我没有在ViewStub上调用inflate。如果在ViewStub上调用inflate方法,那么一切都很完美。

1 个答案:

答案 0 :(得分:2)

对不起兄弟,我只是误解了你的意思。

如果看到Offical Document,您可能会看到此消息“ViewStub是一个不可见的零大小视图”。让我们在ViewStub中看到一些源代码:

private void initialize(Context context) {
    mContext = context;
    setVisibility(GONE);
    setWillNotDraw(true);
}

当ViewStub初始化时,它设置为GONE,这就是android:layout_alignParentBottom="true"RelativeLayout无效的原因。

您可以尝试使用“简单视图”而不是ViewStub,并将该视图visibility设置为GONEandroid:layout_alignParentBottom="true"也无效。

所以,我不认为这是一个Bug!

修改 我找到了一个类似的问题:Issue with RelativeLayout when View visibility is View.GONE

你可以在你的“Some text2”TextView中添加以下代码,一切都解决了! android:layout_alignWithParentIfMissing="true"