Как использовать 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 (как бы много вы ни говорили, это работает), это чисто случайный случай.
Я столкнулся с той же проблемой с 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);