0

Я немного отскочил и не смог найти решение, соответствующее тому, что я пытаюсь сделать.
У меня есть 2 RelativeLayouts внутри LinearLayout.
Я бы хотел, чтобы первый RelativeLayout занял 60% экрана.
Я хотел бы, чтобы второй макет взял оставшуюся часть экрана.Макет, одна ViewGroup занимает 60% высоты, а другая заполняет остальные

Я использую весы, но я пытаюсь выяснить, есть ли способ, которым я могу избежать использования вторичного веса на втором RelativeLayout.
Причина этого в том, что пользователь имеет возможность с помощью кнопки «Щелчок», чтобы скрыть первый макет.

В коде я делаю это, установив видимость первого RelativeLayout на «Gone».
Проблема заключается в том, что если у меня установлен вес .6 и .4 и сумма 1, когда первый из них ушел, второй движется правильно, но его высота не увеличивается, так как она была установлена ​​на 40 %.

В идеале я мог бы настроить его на заполнение оставшегося места на экране, и поэтому, когда первый будет скрыт, он теперь займет все 100% экрана.
Возможно ли это, или мне нужно сделать больше программно, когда я скрою первый вид, чтобы увеличить разрешенную высоту второго представления?
Надеюсь, это имеет смысл, если не сообщит мне, и я попытаюсь уточнить дальше.

Я удалил часть содержимого RelativeLayouts для простоты, а также некоторые идентификаторы.

код ниже:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:breadCrumbNavigationLayout="http://schemas.android.com/apk/res-auto" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/white" 
android:id="@+id/linearlayout1" 
android:focusable="true" 
android:focusableInTouchMode="true" 
android:weightSum="1"> 
<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:id="@+id/relativeLayout1" 
    android:layout_weight="0.6"> 
    <FrameLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/frame1" /> 
    <ProgressBar 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:id="@+id/progress" 
     android:indeterminateOnly="true" 
     android:keepScreenOn="true" 
     android:visibility="gone" /> 
    </RelativeLayout> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/relative2"> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="" 
      android:textSize="16dp" 
      android:gravity="center_horizontal" 
      android:layout_below="@+id/relativeLayout1" /> 
     <ListView 
      android:id="@+id/list" 
      android:minWidth="25px" 
      android:minHeight="25px" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:dividerHeight="1dp" /> 
    </RelativeLayout> 
</LinearLayout> 

ответ

0

Вы можете использовать в процентах Relative Layout Android Поддержка Библиотека для достижения этой цели. Percentage Relative Layout

процент импорта библиотеки поддержки, добавив следующую строку в build.gradle (уровень приложений),

compile 'com.android.support:percent:24.2.1' 

И Ваш файл XML будет,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:breadCrumbNavigationLayout="http://schemas.android.com/apk/res-auto" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/white" 
    android:id="@+id/linearlayout1" 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:weightSum="1"> 

    <android.support.percent.PercentRelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<RelativeLayout 
android:layout_height="0dp" 
android:layout_width="match_parent" 
app:layout_heightPercent="60%" 
android:id="@+id/relativeLayout1" 
> 
<FrameLayout 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/frame1" /> 
<ProgressBar 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:id="@+id/progress" 
    android:indeterminateOnly="true" 
    android:keepScreenOn="true" 
    android:visibility="gone" /> 
</RelativeLayout> 
<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/relativeLayout1" 
    android:id="@+id/relative2"> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="" 
     android:textSize="16dp" 
     android:gravity="center_horizontal" 
     android:layout_below="@+id/relativeLayout1" /> 
    <ListView 
     android:id="@+id/list" 
     android:minWidth="25px" 
     android:minHeight="25px" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:dividerHeight="1dp" /> 
</RelativeLayout> 
</android.support.percent.PercentRelativeLayout> 

</LinearLayout> 

После того, как вы установили,

relativeLayout1.setVisibility(View.GONE); 

Вы можете видеть, что Относительная компоновка 2 будет занимать все родительское пространство.

Я надеюсь, что это вам поможет. Всего наилучшего.

+0

Вы можете установить начальную высоту макета на 60% и вторую компоновку ниже первой компоновки, а вторую высоту макета - match_parent. Когда вы скроете первый макет, он займет весь макет. –

+1

@ Майк М. Хорошо. Я отредактирую свой ответ. Спасибо –

+0

Я могу посмотреть на это, но похоже, что он все еще хочет несколько процентов, чтобы закрыть экран? Можно ли установить процент только на одном из содержимого, а другой - заполнить остальные? – Kyle

Смежные вопросы