#android #android-layout #android-fragments
#Android #android-макет #android-фрагменты
Вопрос:
У меня двойная панель, параллельный макет с использованием FrameLayouts, каждый из которых эффективно заполняет высоту экрана (за исключением полей):
Расположение правого «FrameLayout» выглядит следующим образом:
<LinearLayout
android:id="@ id/details_frame"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="2"
android:orientation="vertical">
<FrameLayout android:id="@ id/details_frag"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:paddingTop="48dp"/>
При определенном выборе в левом фрагменте я хочу разделить правый фреймлайут на два, чтобы я мог помещать в каждый разные фрагменты, при этом верхний фрейм переносится на содержимое, а нижний занимает оставшееся пространство следующим образом:
Я экспериментировал с добавлением нового фреймлайута ниже существующего, а затем играл с весом, высотой, и это ближе к тому, что я хочу, за исключением того факта, что фрагмент, в который я хочу поместить, detaisl_frag_lower
является a ListFragment
, и когда на экране больше записей, чем умещается, список заканчиваетсязаполняется за пределами нижней части экрана, а не прокручивается в пределах доступной области:
<FrameLayout android:id="@ id/details_frag"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:paddingTop="48dp"/>
<FrameLayout android:id="@ id/details_frag_lower"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"/>
Редактировать
Кстати, я добавляю фрагменты в каждое описание фрейма
Заранее спасибо. Питер.
Ответ №1:
Я бы изменил все это на LinearLayout. layout_weight заполнит для вас пространство. Вы можете показать / скрыть красную панель, найдя ее по идентификатору, затем установить pane.setVisibility(Просмотр.ВИДИМЫЙ) (или установить View.GONE)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#ffff00"
android:orientation="vertical"
android:id="@ id/details_frag">
<!-- Left pane content -->
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#00ff00"
android:orientation="vertical">
<!-- Right pane content -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="80dp"
android:orientation="vertical"
android:background="#ff0000"
android:visibility="gone"
android:id="@ id/details_frag_upper">
<!-- Initially hidden. Fill with whatever on left pane click -->
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#0000ff"
android:id="@ id/details_frag_lower"
android:layout_weight="1">
<!-- Initially hidden. Fill with whatever on left pane click -->
</LinearLayout>
</LinearLayout>
</LinearLayout>
Комментарии:
1. Спасибо, я учел это, и мне понадобятся FrameLayouts для раздувания в них фрагментов (это не влияет на ваше решение). Мне нужно протестировать, но я бы предпочел, чтобы у ‘details_frag_upper’ была высота
wrap_content
2. Вы можете изменить высоту на wrap_content . Я ввел фиксированное значение для тестирования. Если бы я поместил туда wrap_content без содержимого, это было бы 0 😉