RelativeLayout和ViewStub通胀

时间:2012-10-24 08:34:01

标签: android android-relativelayout inflate viewstub

我有以下布局。

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

    <TextView android:id="@+id/list_item_name"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"/>

    <ViewStub android:id="@+id/stub_for_alt_name"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:layout_below="@+id/list_item_name"
              android:layout="@layout/text_view_alt_name"/>

    <ImageView android:id="@+id/list_item_dopinfo1_image"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_below="@+id/stub_for_alt_name"
               android:src="@drawable/ic_released"/>

</RelativeLayout>

我希望ViewStub位于TextView和ImageView之下,位于ViewStub之下。

ViewStub膨胀的元素按照我的预期显示。 但没有ViewStub的元素将TextView与ImageView重叠。

我的布局出了什么问题?

更新

我发现的唯一解决方案是为ViewStub和相关的TextView提供相同的android:id值。

4 个答案:

答案 0 :(得分:24)

我知道这是一个老问题,但其中的诀窍是将inflatedId参数设置为与实际viewStub本身相同,如下所示:

<ViewStub android:id="@+id/stub_for_alt_name"
          android:inflatedId="@id/stub_for_alt_name"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_below="@+id/list_item_name"
          android:layout="@layout/text_view_alt_name"/>

答案 1 :(得分:5)

我发现的唯一解决方案是为ViewStub和相关的TextView提供相同的android:id值。

答案 2 :(得分:3)

这是一个老问题,但我有一个有用的补充

1)是的,就像其他人发布的一样 - 使用相同的idinflatedId

<ViewStub 
   android:id="@+id/view_stub_id"
   android:inflatedId="@id/view_stub_id"
   ... 
/>

2)当您需要充气查看 刷新其内容时,方便的行为如下:

    View v = parentView.findViewById(R.id.view_stub_id);
    if (v instanceof ViewStub)
        v = ((ViewStub) v).inflate();

    // here v is always the inflated view
    // ...

答案 3 :(得分:1)

Hi you can try this one.

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

//you can add another relative layout containing your textview and imageview
  <RelativeLayout
        android:id="@+id/layout_content" 
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >


        <TextView android:id="@+id/list_item_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

         <ImageView android:id="@+id/list_item_dopinfo1_image"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_below="@+id/stub_for_alt_name"
             android:src="@drawable/ic_released"
             android:layout_below="@+id/list_item_name" />

</RelativeLayout>

<ViewStub android:id="@+id/stub_for_alt_name"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_below="@+id/list_item_name"
          android:layout="@layout/text_view_alt_name"
          android:layout_below="@+id/layout_content" />

</RelativeLayout>