Как использовать PercenRelativeLayout для элемента listView

Я пытаюсь использовать PercenRelativeLayout в ListView, но он не работает, проценты высоты и ширины игнорируются и ничего не отображается в просмотре списка. это работает только для зефира.

вот элемент списка xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<ImageView
    android:background="#d20404"
    android:id="@+id/test_image_id"
    android:layout_width="match_parent"
    android:layout_height="300dp" />

<TextView
    android:background="#000"
    android:text="sfgfashdsfg"
    android:layout_below="@+id/test_image_id"
    app:layout_heightPercent="50%"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

</android.support.percent.PercentRelativeLayout>

У меня есть пример проекта на GitHub

2 ответа

Решение

Я открыл эту проблему в Google. Ответ был

Высота элемента строки ListView указана недостаточно.

Первый дочерний элемент говорит, что он хочет получить 60% высоты строки (обратите внимание, что это heightPercent, а не aspectRatio), а второй дочерний элемент говорит, что он хочет получить 10% высоты строки. Но ничто не говорит ListView, какой высоты должна быть вся строка. Так что в итоге получается высота 0.

Обратите внимание, что семантика height=match_parent не работает в строках ListView, и если это работает в какой-то одной конкретной версии платформы Android (как бы много вы ни говорили, это работает), это чисто случайный случай.

https://code.google.com/p/android/issues/detail?id=202479

Я столкнулся с той же проблемой с Android K и Android L.

Процентная разметка не будет работать правильно до android M. Причина в том, что они зависят от подсказки размера, доставляемой на этапе измерения. До Android M большинство макетов предоставили бы подсказку о размере 0.

Преобразуйте относительный макет вашего процента в относительный макет и установите программно высоту просмотра в соответствии с высотой вашего устройства.

Это не очень элегантное решение, но оно сработало для меня.

XML-код:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<ImageView
    android:id="@+id/test_image_id"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:background="#d20404" />

<TextView
    android:id="@+id/textview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/test_image_id"
    android:background="#000"
    android:text="sfgfashdsfg" />

</RelativeLayout>

Java-код:

// to get the height of the screen
int height = getWindowManager().getDefaultDisplay().getHeight();

// to set height to each textview to 50% of screen
textView1.getLayoutParams().height = (int) (height * 0.50);
Другие вопросы по тегам