RelativeLayout и 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 ответа
Единственное решение, которое я нашел, это дать ViewStub и связанный TextView одинаковые android:id
значение.
Я знаю, что это немного старый вопрос, но хитрость в том, чтобы установить 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) Да, как и другие опубликовали - используйте то же самое id
а также inflatedId
:
<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
// ...
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>