Переход от однокадрового описания, заполняющего родительский элемент, к двойному / разделенному с переносом верхнего в содержимое

#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 😉