2014-02-02 3 views
2

У меня есть этот макет:Android: Как сделать макет, который подходит для нескольких размеров экрана?

enter image description here

, как Вы можете видеть, что есть номера в каждой из окружностей. Я создал его с помощью RelativeLayout, а затем играл с полями каждого TextView, и он хорошо выглядит на моем Nexus 4.

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

Осмотревшись по сети, я увидел, что я не могу использовать процент, так как я могу сделать этот макет подходящим для всех размеров экрана?

Вот как я это сделал:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/circleContainer" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="zoomCircle" > 

    <ImageView 
     android:id="@+id/circleImg" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_margin="5dp" 
     android:contentDescription="@string/packages_desc" 
     android:src="@drawable/circle" /> 

    <TextView 
     android:id="@+id/numOfEnv" 
     style="@style/whiteCircleText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignRight="@id/circleImg" 
     android:layout_marginRight="@dimen/rightMargin" 
     android:layout_marginTop="@dimen/topMargin" 
     android:text="100" /> 

    <TextView 
     android:id="@+id/numSmall" 
     style="@style/whiteCircleText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@id/circleImg" 
     android:layout_alignRight="@id/circleImg" 
     android:layout_marginBottom="@dimen/bottomMargin" 
     android:layout_marginRight="@dimen/rightMargin" 
     android:text="20" /> 

    <TextView 
     android:id="@+id/numMedium" 
     style="@style/whiteCircleText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@id/circleImg" 
     android:layout_alignLeft="@id/circleImg" 
     android:layout_marginBottom="@dimen/bottomMargin" 
     android:layout_marginLeft="@dimen/leftMargin" 
     android:text="30" /> 

    <TextView 
     android:id="@+id/numBig" 
     style="@style/whiteCircleText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@id/circleImg" 
     android:layout_marginLeft="@dimen/leftMargin" 
     android:layout_marginTop="@dimen/topMargin" 
     android:text="740" /> 



</RelativeLayout> 

ответ

0

Вы находитесь на правильном пути, используя размеры. Сделайте другую папку values для каждого размера экрана, который вы хотите поддержать, то есть values-sw320dp, values-sw600dp и т. Д. Каждый со своим собственным файлом dimens.xml. Затем добавьте разные значения для leftMargin, topMargin и т. Д. В каждый размерный файл. Посмотрите раздел «Использование квалификаторов нового размера» here для получения дополнительной информации.

+0

Майк, спасибо, что знаю об этом решении, но все же он не идеален, прежде всего, это большая работа (я хочу поддержать версию 2.3), но я бы не возражал, если бы это действительно сработало, но я запускал его на nexus4 и Galaxy s4, а на галактике s4 поля были немного выключены. Похоже, что единственное решение здесь делает это программно. – Tomer

0

Я думаю, вам нужно создать каждый объект и добавить в макет программно и использовать соотношение для каждого объекта. Например: соотношение экрана 9/16.

высота = размер.y; ширина = соотношение * высота;

Каждый объект будет устанавливать параметры макета или поля, они должны следовать этой ширине и высоте.

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