不同屏幕尺寸的布局

时间:2014-12-26 16:36:55

标签: android

This is what appears \ This is what I want

我已经阅读了所有文档,我在stackoverflow以及其他地方读过很多东西。

但我仍然无法摆脱这种泥泞。我已经制作了一个应用程序到目前为止,我在我的Nexus 5上进行了测试。现在它几乎完成了,我想让它与各种手机兼容,因此屏幕尺寸各不相同。

当我在Nexus S上测试我的应用程序(它是4“/ 400 x 800)时,一切都显得很大,并且没有像预期的那样适合屏幕。所以我创建了另一个名为layout-layout的布局并调整了字体大小和所有这些但是在Nexus S中,使用了默认布局文件夹的布局,而不是布局小文件夹。

任何人都可以花几分钟时间向我解释这个“多屏尺寸支持”,这样做的最佳方法是什么?

谢谢

默认布局文件夹:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="25sp"
    android:background="#009688">

    <RelativeLayout
        android:layout_weight="0.5"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="0sp"
        android:id="@+id/linear">

        <TextView
            android:layout_marginTop="35sp"
            android:id="@+id/mission"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="MISSION"
            android:textColor="#ffffff"
            android:textSize="65sp"
            android:gravity="center_horizontal"/>

        <TextView
            android:layout_below="@+id/mission"
            android:id="@+id/notimpossible"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="NOT IMPOSSIBLE"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:textSize="35sp"
            android:gravity="center_horizontal"/>

    </RelativeLayout>

    <RelativeLayout
        android:padding="10sp"
        android:layout_weight="0.5"
        android:layout_width="match_parent"
        android:layout_height="0sp"
        android:layout_below="@+id/linear">

        <TextView
            android:id="@+id/random_main"
            android:textSize="20sp"
            android:textColor="@color/white"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

    </RelativeLayout>


    <TextView
        android:id="@+id/ahead"
        android:clickable="true"
        android:layout_marginBottom="35sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:text="Go Ahead! "
        android:textSize="23sp"
        android:textColor="@drawable/text_focus_white"
        android:layout_marginRight="8sp"
        android:layout_gravity="right"/>
</LinearLayout>

布局 - 小文件夹(具有较小的字体大小和填充)

   
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10sp"
    android:background="#009688">

    <RelativeLayout
        android:layout_weight="0.5"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="0sp"
        android:id="@+id/linear">

        <TextView
            android:layout_marginTop="20sp"
            android:id="@+id/mission"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="MISSION"
            android:textColor="#ffffff"
            android:textSize="50sp"
            android:gravity="center_horizontal"/>

        <TextView
            android:layout_below="@+id/mission"
            android:id="@+id/notimpossible"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="NOT IMPOSSIBLE"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:textSize="28sp"
            android:gravity="center_horizontal"/>

    </RelativeLayout>

    <RelativeLayout
        android:padding="8sp"
        android:layout_weight="0.5"
        android:layout_width="match_parent"
        android:layout_height="0sp"
        android:layout_below="@+id/linear">

        <TextView
            android:id="@+id/random_main"
            android:textSize="13sp"
            android:textColor="@color/white"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

    </RelativeLayout>


    <TextView
        android:id="@+id/ahead"
        android:clickable="true"
        android:layout_marginBottom="25sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:text="Go Ahead! "
        android:textSize="19sp"
        android:textColor="@drawable/text_focus_white"
        android:layout_marginRight="8sp"
        android:layout_gravity="right"/>
</LinearLayout>

3 个答案:

答案 0 :(得分:3)

检查一下:http://developer.android.com/guide/practices/screens_support.html

创建

layout-mdpi
layout-hdpi
layout-xhdpi
layout-xxhdpi
layout-xxxhdpi

不同dpi的文件夹。对于不同的尺寸,您可以使用

layout-small (for small size phones)
layout-normal (for normal size phones)
layout-large (for 7 inch tablets)
layout-xlarge (for 10 inch tablets)

也可以使用

layout-large-hdpi
layout-large-mdpi
layout-xlarge-hdpi
layout-xlarge-mdpi

对于nexus S,您需要使用layout-normal或layout-hdpi

答案 1 :(得分:2)

如果您具有相同的布局,则无需创建多个布局xml。 您可以通过dimens.xml

调整文本大小(或各种维度参数)

例如

RES /布局/ your_activity.xml

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/space_large"
    android:textSize="@dimen/text_small"/>

RES /值/ dimens.xml

<!-- this is common parameter -->
<dimen name="text_small">12sp</dimen>
<dimen name="space_large">8dp</dimen>

RES /值-大/ dimens.xml

<!-- for large-size display -->
<dimen name="text_small">14sp</dimen>
<dimen name="space_large">12dp</dimen>

这种方法有时很有效。

如果您的布局因显示尺寸而显着变化,您应该选择多种layout-xml样式,如@oguzhand所说。

答案 2 :(得分:0)

每个Android开发人员都必须面对这个问题,我也是如此。使用各种小部件之间相同比例的同一方式使布局看起来最好的方法是以编程方式设置大小。首先,您需要获取屏幕的尺寸,然后根据它们设置尺寸。因此,例如,如果您希望TextView的textSize为屏幕高度的1/10,则只需执行以下操作:tv.setTextSize(height / 10);通过这种方式,您可以确定无论屏幕如何,文本都将以相同的方式显示。