масштабирование макета Android с фиксированным соотношением сторон на разных телефонах - PullRequest
6 голосов
/ 08 июля 2011

У меня есть макет с двумя ImageView внутри. Каждое изображение имеет фиксированное соотношение сторон, например, первое изображение имеет размер 320х160, второе - 320х320. Макет выровнен по вертикали. Я хочу, чтобы эти два изображения были склеены и масштабированы так, чтобы соответствовать одной из сторон экрана (ширина или высота) и пропорционально масштабировать другую сторону. Я пытался использовать scaleType = fitCenter, но проблема в том, что на разных телефонах с разным соотношением сторон изображения не вместе, между ними есть черная область. Кажется, что я не могу использовать макет: вес, потому что экраны имеют различное соотношение (480x854 и 480x800), и мне нужно, чтобы мой макет оставался в той же пропорции.

Любая помощь приветствуется.

Вот мой макет сейчас:

<LinearLayout 
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView android:src="@drawable/im_menu"
 android:adjustViewBounds="true"
 android:scaleType="fitCenter"
 android:layout_width="fill_parent" android:layout_height="wrap_content"
 android:layout_gravity="center_horizontal|top"
 android:layout_weight="0.7"
>
</ImageView>
<ImageView android:src="@drawable/im_field" 
 android:adjustViewBounds="true"
 android:scaleType="fitCenter"
 android:layout_width="fill_parent" android:layout_height="wrap_content"
 android:layout_gravity="center_horizontal|top"
 android:layout_weight="0.3"
>
</ImageView>
</LinearLayout>

Ответы [ 2 ]

6 голосов
/ 08 июля 2011

Вы можете использовать:

android:adjustViewBounds="true"

и установить fill_parent на высоту, например

<ImageView 
...
android:layout_height="fill_parent"
...>

AdjustViewBounds для моих данных

2 голосов
/ 08 июля 2011

Вы также можете использовать вес макета с относительными значениями.Например, если вам нужно поле с 30%, а другое с 70%, просто установите вес дочерних представлений с 0,3 и 0,7, и не указывайте ни ширину, ни высоту у детей.Это объясняется в руководстве разработчика (раздел с советами):

руководство разработчика - линейный макет

Также вам может потребоваться использовать RelativeLayout вместо LinearLayout.

...