我在大屏幕设备上的布局与大屏幕预览不匹配

时间:2013-01-21 15:47:32

标签: android eclipse layout dpi screen-size

我一直在Galaxy 5 Media Player上测试我的大多数布局,所有布局都在查看我如何在常规layout文件夹中设计它们。我使用SDK 10,因此我不使用layout-sw600dp类型文件夹,而是使用/layout/layout-large等。

虽然我的布局在Galaxy 5播放器上看起来很好,但是当我在将要使用的其他设备Lenovo Ideapad A1上尝试它们时,视图不正确。我在/layout-large为7英寸平板电脑创建了一个新的xml文件,但现在预览中的内容与我设备上的内容不匹配。

我使用的是RelativeLayout,但没有任何内容,只有8个按钮。声明的第一个按钮与底部对齐,然后每个跟随按钮放置在它下面的按钮上方,并设置marginBottom参数。

这是原始视图的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/v2"
    android:gravity="center_horizontal"
    android:orientation="vertical" >

    <Button
        android:id="@+id/exitButton"
        android:layout_width="350dp"
        android:layout_height="60dp"
        android:layout_marginBottom="36dp"
        android:layout_alignParentBottom="true"
        android:textColor="@android:color/white"
        android:background="@drawable/sel_button_round"
        android:text="@string/main_exit" />

    <Button
        android:id="@+id/findDeviceButton"
        android:layout_width="350dp"
        android:layout_height="60dp"
        android:layout_marginBottom="18dp"
        android:layout_above="@id/exitButton"
        android:textColor="@android:color/white"
        android:background="@drawable/sel_button_round"
        android:text="@string/main_find_device" />

    <Button
        android:id="@+id/cebusButton"
        android:layout_width="350dp"
        android:layout_height="60dp"
        android:layout_marginBottom="18dp"
        android:layout_above="@id/findDeviceButton"
        android:textColor="@android:color/white"
        android:background="@drawable/sel_button_round"
        android:text="@string/main_cebus" />

    <Button
        android:id="@+id/operationsButton"
        android:layout_width="350dp"
        android:layout_height="60dp"
        android:layout_marginBottom="18dp"
        android:layout_above="@id/cebusButton"
        android:textColor="@android:color/white"
        android:background="@drawable/sel_button_round"
        android:text="@string/main_operations" />

    <Button
        android:id="@+id/monitorButton"
        android:layout_width="350dp"
        android:layout_height="60dp"
        android:layout_marginBottom="18dp"
        android:layout_above="@id/operationsButton"
        android:textColor="@android:color/white"
        android:background="@drawable/sel_button_round"
        android:text="@string/main_monitor" />

    <Button
        android:id="@+id/wavesButton"
        android:layout_width="350dp"
        android:layout_height="60dp"
        android:layout_marginBottom="18dp"
        android:layout_above="@id/monitorButton"
        android:textColor="@android:color/white"
        android:background="@drawable/sel_button_round"
        android:text="@string/main_waves" />

    <Button
        android:id="@+id/statusButton"
        android:layout_width="350dp"
        android:layout_height="60dp"
        android:layout_marginBottom="18dp"
        android:layout_above="@id/wavesButton"
        android:textColor="@android:color/white"
        android:background="@drawable/sel_button_round"
        android:text="@string/main_status" />

    <Button
        android:id="@+id/more_parametersButton"
        android:layout_width="350dp"
        android:layout_height="60dp"
        android:layout_marginBottom="18dp"
        android:layout_above="@id/statusButton"
        android:textColor="@android:color/white"
        android:background="@drawable/sel_button_round"
        android:text="@string/main_parameters" />

</RelativeLayout>

当我在7英寸设备上运行时,按钮很大并且超过屏幕顶部。但是在Eclipse的预览中,按钮都非常适合屏幕。为什么它预览显示了一个不同于我期望的视图?

修改

我调整了XML文件,使其在我的平板电脑上运行。虽然现在预览看起来更糟,但以下XML文件会在我的设备上生成我想要的结果。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/v2"
    android:gravity="center_horizontal"
    android:orientation="vertical" >

    <Button
        android:id="@+id/exitButton"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_marginBottom="30dp"
        android:layout_alignParentBottom="true"
        android:textColor="@android:color/white"
        android:background="@drawable/sel_button_round"
        android:text="@string/main_exit" />

    <Button
        android:id="@+id/findDeviceButton"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_marginBottom="15dp"
        android:layout_above="@id/exitButton"
        android:textColor="@android:color/white"
        android:background="@drawable/sel_button_round"
        android:text="@string/main_find_device" />

    <Button
        android:id="@+id/cebusButton"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_marginBottom="15dp"
        android:layout_above="@id/findDeviceButton"
        android:textColor="@android:color/white"
        android:background="@drawable/sel_button_round"
        android:text="@string/main_cebus" />

    <Button
        android:id="@+id/operationsButton"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_marginBottom="15dp"
        android:layout_above="@id/cebusButton"
        android:textColor="@android:color/white"
        android:background="@drawable/sel_button_round"
        android:text="@string/main_operations" />

    <Button
        android:id="@+id/monitorButton"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_marginBottom="15dp"
        android:layout_above="@id/operationsButton"
        android:textColor="@android:color/white"
        android:background="@drawable/sel_button_round"
        android:text="@string/main_monitor" />

    <Button
        android:id="@+id/wavesButton"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_marginBottom="15dp"
        android:layout_above="@id/monitorButton"
        android:textColor="@android:color/white"
        android:background="@drawable/sel_button_round"
        android:text="@string/main_waves" />

    <Button
        android:id="@+id/statusButton"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_marginBottom="15dp"
        android:layout_above="@id/wavesButton"
        android:textColor="@android:color/white"
        android:background="@drawable/sel_button_round"
        android:text="@string/main_status" />

    <Button
        android:id="@+id/more_parametersButton"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_marginBottom="15dp"
        android:layout_above="@id/statusButton"
        android:textColor="@android:color/white"
        android:background="@drawable/sel_button_round"
        android:text="@string/main_parameters" />

</RelativeLayout>

1 个答案:

答案 0 :(得分:4)

我认为不是你的布局问题检查屏幕兼容性

如果您的应用程序仅与小屏幕和普通屏幕兼容,无论屏幕密度如何,则必须指定八个不同的元素,因为每个屏幕尺寸都有四种不同的密度配置

 <compatible-screens>
<screen android:screenSize=["small" | "normal" | "large" | "xlarge"]
        android:screenDensity=["ldpi" | "mdpi" | "hdpi" | "xhdpi"] />
...

有关详细信息,请查看此LINK

以下是有关如何确保应用程序在不同屏幕上正常显示的快速清单:

在XML布局文件中指定尺寸时使用wrap_content,fill_parent或dp单位

  1. 请勿在应用程序代码中使用硬编码像素值

  2. 请勿使用AbsoluteLayout(已弃用)

  3. 为不同的屏幕密度提供替代位图drawable

  4. Android系统可以通过两种方式帮助您的应用实现密度独立性:

    1. 系统会根据当前屏幕缩放dp单位 密度

    2. 系统将可绘制资源缩放到适当的大小 当前屏幕密度,如有必要

    3. 有关详细信息,请查看此LINK