2012-05-20 5 views
1

В моем приложении у меня есть 2 линейных макета: один сверху, один внизу.Исправлена ​​доля макета на экране

Я хочу, чтобы все, что находится внутри этих макетов, расположение верхней занимает 60% высоты экрана и макет нижнего 40%. Вот мой XML-код:

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:layout_weight="1.0" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.6" 
     android:orientation="vertical" 
     android:id="@+id/layout_top"> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_weight="0.4" 
     android:id="@+id/layout_bottom"> 
    </LinearLayout> 

</LinearLayout> 

Когда эти макеты пусты, никаких проблем, они не имеют хорошие пропорции.

Проблема заключается в том, что если я разместил небольшой список в верхнем макете, например, то макет примет размер списка и не сохранит пропорцию 60/40%.

Я бы хотел, чтобы мой список был небольшим (например, только 3 элемента), макет сохранял его на 60% и поэтому помещал пустое пространство под мой список.

Я попытался изменить android:layout_height на match_parent, но это ничего не меняет.

Спасибо.

+0

Ваш макет, кажется, в порядке. Не могли бы вы показать, как вы добавляете небольшой список в верхнем макете. – rizzz86

ответ

6

Попробуйте использовать этот макет он работает для меня

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:layout_weight="1.0" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dip" 
     android:layout_weight="6" 
     android:orientation="vertical" 
     android:id="@+id/layout_top" 
     android:background="#FF0000"> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dip" 
     android:orientation="vertical" 
     android:layout_weight="4" 
     android:id="@+id/layout_bottom" 
     android:background="#FF00FF"> 
    </LinearLayout> 

</LinearLayout> 

Хитрость заключается в том, чтобы создать layout_height="0dip" вместо wrap_content в портретном режиме и layout_with="0dip" вместо wrap_content в ландшафтном режиме, вы можете использовать папка макета-земли для этого.

+0

Это работает, спасибо большое :)! – Jecimi

1

layout_weight укажите дополнительное пространство в макете вида. Вы должны попытаться измерить экран первого типа:

Display display = ((WindowManager) 
    getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
int width = display.getHeight(); 

, а затем делает некоторые вычисления, как ширина * 0,6 и 0,4, таким образом ваш макет всегда будет иметь 60 40 соотношение.

Надежда Это помогает

0

попробовать layout_height = 0dp в обоих детей LinearLayouts. Это происходит потому, что у вас есть wrap_content, который, вероятно, перекрывает эффект layout_weight.

0

Просто в вашем родительском макете, замените android:layout_weight="1.0" с android:weightSum="1.0"

Это работает путем установки веса суммы родительского макета и весов раскладок детей. Вес детей должен быть равен весовой сумме родителя. Посмотрите на эту http://blog.stylingandroid.com/archives/312