我应该使用哪些限定符来支持不同手机屏幕的布局?

时间:2016-09-09 10:43:39

标签: android screen pixels dpi

我在支持不同手机/平板电脑屏幕尺寸的布局方面遇到了一些问题。我的布局可能不适合或缩放在所有屏幕上。有些屏幕尺寸会占用太多空间,而其他屏幕尺寸则无法容纳所有视图。

我尝试使用不同的限定符生成不同的布局:PX中的密度,尺寸和大小以及大/小/ x大限定符。 但我无法弄清楚我应该用什么来完全适应所有的屏幕。

这是我的布局如何在不同的屏幕上运行的描述(使用genymotion模拟器测试)

480px x 800px 240dpi (S3 Mini):视图dosn不适合高度。

480px x 800px 120dpi :(模拟器):视图dosn不适合高度

480px x 800px 320dpi:视图周围的可用空间过多。

600px x 1024px 240dpi:完美契合!

600px x 1024px 420dpi:几乎没有空间可以显示任何内容。最多可能有2-3次观看

1440px x 2560px 560dpi :一点点自由空间

1440px x 2560px 640DPI:完美契合!

1440px x 2560px 320DPI:视图周围的空间太多

以下是布局统计数据如何针对不同屏幕进行缩放的屏幕截图示例:

三星S3 MINI:480px x 800px 240dpi: https://www.dropbox.com/s/kvxggql80ivcmlp/galaxys3mini.png?dl=0

三星Galaxy S7:1440px x 2560px 640DPI: https://www.dropbox.com/s/ivjd6a0zgc81oqy/galaxys7.png?dl=0

Nexus 9 API 23 2048x1536 xhdpi: https://www.dropbox.com/s/r70h4da1xcf2lhi/nexus9.PNG?dl=0

我应该使用哪些限定符?'

布局xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/arion_darkblue">

<TextView
    android:id="@+id/stats_title"
    style="@style/fragment_titles_style"
    android:layout_alignParentTop="true"
    android:text="Stats" />


<RelativeLayout
    android:id="@+id/statsgroup1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/stats_title"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="25dp">


    <ImageView
        android:id="@+id/stats_distance_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:background="@drawable/ic_stats_distance" />

    <TextView
        android:id="@+id/stats_distance_txt"
        style="@style/fragments_textstyles"
        android:layout_below="@id/stats_distance_img"
        android:text="0,0 Km" />

    <ImageView

        android:id="@+id/stats_jump_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:layout_marginLeft="35dp"
        android:layout_toRightOf="@id/stats_distance_txt"
        android:background="@drawable/ic_stats_jump" />

    <TextView
        android:id="@+id/stats_jump_txt"
        style="@style/fragments_textstyles"
        android:layout_below="@id/stats_distance_img"
        android:layout_marginLeft="35dp"
        android:layout_toRightOf="@id/stats_distance_txt"
        android:text="00" />

    <ImageView
        android:id="@+id/stats_transition_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="65dp"
        android:layout_toRightOf="@id/stats_jump_txt"
        android:background="@drawable/ic_stats_transition" />

    <TextView
        android:id="@+id/stats_transition_txt"
        style="@style/fragments_textstyles"
        android:layout_below="@id/stats_distance_img"
        android:layout_marginLeft="80dp"
        android:layout_toRightOf="@id/stats_jump_txt"
        android:text="00" />


    <ImageView
        android:id="@+id/stats_intensity_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="40dp"
        android:layout_toRightOf="@id/stats_transition_img"
        android:background="@drawable/ic_stats_intensity" />


    <TextView
        android:id="@+id/stats_intensity_txt"
        style="@style/fragments_textstyles"
        android:layout_below="@id/stats_distance_img"
        android:layout_marginLeft="55dp"
        android:layout_toRightOf="@id/stats_transition_txt"
        android:text="0000" />

</RelativeLayout>


<RelativeLayout
    android:id="@+id/stats_symmetric_group"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/statsgroup1"
    android:layout_marginTop="50dp"
    android:paddingLeft="30dp"
    android:paddingRight="30dp">


    <TextView
        android:id="@+id/stats_sym_txt1"
        style="@style/fragments_textstyles"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="10dp"
        android:text="50%" />


    <ImageView
        android:id="@+id/stats_symmertic_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@id/stats_sym_txt1"
        android:background="@drawable/ic_stats_symmetric" />


    <TextView

        style="@style/fragments_textstyles"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@id/stats_symmertic_img"
        android:text="50%" />


    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true">


        <TextView
            android:id="@+id/stats_rotation_txt1"
            style="@style/fragments_textstyles"
            android:layout_alignParentLeft="true"
            android:layout_marginRight="10dp"
            android:text="50%" />

        <ImageView
            android:id="@+id/stats_rotation_img"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/stats_rotation_txt1"
            android:background="@drawable/ic_stats_rotation" />


        <TextView
            android:id="@+id/stats_rotation_txt2"
            style="@style/fragments_textstyles"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@id/stats_rotation_img"
            android:text="50%" />


    </RelativeLayout>

</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

您是否听说过using several dimens.xml档案?

具有不同的尺寸但只有一个布局

这样你可以有一个布局,但是可以定义来自不同dimens.xml的元素的大小,这些元素分别为你想要支持的每个大小描述dp大小。 官方android页面的示例:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="textview_height">25dp</dimen>
    <dimen name="textview_width">150dp</dimen>
    <dimen name="ball_radius">30dp</dimen>
    <dimen name="font_size">16sp</dimen>
</resources>

然后您可以使用布局中的这些值:

<TextView
    android:layout_height="@dimen/textview_height"
    android:layout_width="@dimen/textview_width"
    android:textSize="@dimen/font_size"/>

如果您有多个dimens.xml但页面只有一个layout.xml,则更容易一致地更改它们。

平板电脑尺寸的设计布局

此外,考虑使用平板电脑尺寸检查smallestWidth资源,您可以轻松处理更大的屏幕,将dimens.xml和/或布局添加到layout-sw600dp/values-sw600dp/等文件夹。 More info here