#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() не реализован.