Android:如何制作适合多种屏幕尺寸的布局?

时间:2014-02-02 09:20:36

标签: android android-layout

我有这个布局:

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>

2 个答案:

答案 0 :(得分:0)

您使用尺寸在正确的轨道上。为您要支持的每个屏幕尺寸创建一个不同的values文件夹,即values-sw320dpvalues-sw600dp等。每个文件夹都有自己的dimens.xml文件。然后,在每个维度文件中为leftMargin,topMargin等添加不同的值。有关详细信息,请参阅“使用新尺寸限定符”here部分。

答案 1 :(得分:0)

我认为你必须创建每个对象并以编程方式添加到布局中,并使用每个对象的比率。例如:您的屏幕比例是9/16。

height = size.y; width = ratio * height;

每个对象都将设置布局参数或边距参数,它们应该遵循此宽度和高度。