Странный макет диалога, когда listview нужна полоса прокрутки

#android #layout #fill #landscape

#Android #макет #заполнить #пейзаж

Вопрос:

Я создал меню опций для своего приложения для Android (ориентированное на API 29), которое отлично работает в портретном режиме. Но если я поворачиваю устройство, чтобы увидеть его в альбомном режиме, то пункты меню сходят с ума: они показывают серое пространство справа, не заполняют родительский элемент, не доступны для просмотра в сером пространстве и т. Д.

Кажется, что match-parent макет не применяется в портретном режиме?

Посмотрите:

Хороший портретный макет

Плохой ландшафтный макет

Это код для меню:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:padding="1dp"
    android:orientation="vertical" >

    <TextView
        android:id="@ id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:padding="8dp"
        android:drawablePadding="8dp"
        android:background="#111111" />
    
    <View
        android:id="@ id/sep"
        style="@style/Separator" />

    <ListView
        android:id="@ id/options"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:dividerHeight="2dp"
        android:longClickable="true" />

</LinearLayout>
 

и это код для элементов опций:

 <?xml version="1.0" encoding="utf-8"?>

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="@drawable/list_selector"
          android:ellipsize="end"
          android:textColor="#DDBBBB"
          android:padding="8dp"
          android:textSize="22sp"
          android:maxLines="1">
</TextView>
 

РЕДАКТИРОВАТЬ 1

Я добавил в меню дополнительные опции, и тот, что находится в портретном режиме, также становится таким же беспорядочным, когда появляется полоса прокрутки диалогового окна. Так что это не проблема альбомной / книжной ориентации, но если список меню помещается во всплывающее диалоговое окно или нет. Теперь я еще больше запутался.

РЕДАКТИРОВАТЬ 2

Переключение на

 android:layout_width="2000sp"
 

в TextView «волшебном» решении проблемы. Это не настоящее решение, а хак, и, следовательно, может вызвать проблемы в будущем…

РЕДАКТИРОВАТЬ 3

По запросу BenP я добавляю дополнительный код для ListAdapter:

 ....
ArrayList<String> lst = new ArrayList<String>();
lst.add("Name to clipboard");
lst.add("Path to clipboard");
lst.add("Rename w/clipboard");
...
String[] options = new String[lst.size()];
options = lst.toArray(options);
final ListAdapter itemlist = new ArrayAdapter<String>(context, R.layout.optionsdialogitem, options);
final Dialog dial = new Dialog(context);
OnItemClickListener listener = new OnItemClickListener() {....}
optionsDialog(dial, file, getDrawableId(file), itemlist, listener, false);
 

И затем метод optionsDialog() (в отдельной библиотеке) создает фактический диалог. Надеюсь, это поможет.

Комментарии:

1. Разве ваша высота TextView в макете элемента опции не должна быть wrap_content ? И сохраните некоторую фиксированную / обернутую высоту для вашего списка

2. @Sarah: Та же проблема с wrap_content (на самом деле, я думаю, что я перепробовал все возможные комбинации!). Что вы имеете в виду под «фиксированной / обернутой высотой для listview»? Пожалуйста, посмотрите мое РЕДАКТИРОВАНИЕ и ответ Zain.

3.Можете ли вы добавить свой ListView Adapter код к вопросу? Меня особенно интересует этот getView() метод.

4. @BenP. Я не думаю, что это будет полезно, но проверьте мое РЕДАКТИРОВАНИЕ 3. Метод getView() не реализован.