为什么我的xml布局不能用于多个屏幕?

时间:2014-06-15 12:59:33

标签: android relativelayout

我使用了相对布局,在dp中完成了所有测量,并为所有各种像素密度创建了图像。尽管使用了与密度无关的像素,但我的图像并没有充分缩小到较小的显示器。为什么我的密度无关的像素尺寸不起作用?

我的目标是使ldpi看起来像下面的xldpi。

xldpi显示(我希望显示器看起来如何) xldpi Display

ldpi显示

lpdi

XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background" >

<en.deco.android.livehud.ImageButtonWithContextMenuInfo
    android:id="@+id/imageButton0"
    android:layout_width="85dp"
    android:layout_height="85dp"
    android:layout_alignParentTop="true"
    android:layout_toRightOf="@+id/nextHandButton"
    android:background="@null"
    android:scaleType="fitXY"
    android:src="@drawable/dotted_box"
    android:contentDescription="@string/acc_seatButton" />

<en.deco.android.livehud.ImageButtonWithContextMenuInfo
    android:id="@+id/imageButton1"
    android:layout_width="85dp"
    android:layout_height="85dp"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:background="@null"
    android:scaleType="fitXY"
    android:src="@drawable/dotted_box"
    android:contentDescription="@string/acc_seatButton" />

<en.deco.android.livehud.ImageButtonWithContextMenuInfo
        android:id="@+id/imageButton2"
        android:scaleType="fitXY"
        android:layout_width="85dp"
        android:layout_height="85dp"
        android:background="@null"
        android:src="@drawable/dotted_box"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:contentDescription="@string/acc_seatButton" />

<en.deco.android.livehud.ImageButtonWithContextMenuInfo
    android:id="@+id/imageButton3"
    android:scaleType="fitXY"
    android:layout_width="85dp"
    android:layout_height="85dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:background="@null"
    android:src="@drawable/dotted_box"
    android:contentDescription="@string/acc_seatButton" />

<en.deco.android.livehud.ImageButtonWithContextMenuInfo
    android:id="@+id/imageButton4"
    android:scaleType="fitXY"
    android:layout_width="85dp"
    android:layout_height="85dp"
    android:layout_alignParentBottom="true"
    android:layout_toRightOf="@+id/nextHandButton"
    android:background="@null"
    android:src="@drawable/dotted_box"
    android:contentDescription="@string/acc_seatButton" />

<en.deco.android.livehud.ImageButtonWithContextMenuInfo
    android:id="@+id/imageButton5"
    android:scaleType="fitXY"
    android:layout_width="85dp"
    android:layout_height="85dp"
    android:layout_alignParentBottom="true"
    android:layout_toLeftOf="@+id/nextHandButton"
    android:background="@null"
    android:src="@drawable/dotted_box"
    android:contentDescription="@string/acc_seatButton" />

<en.deco.android.livehud.ImageButtonWithContextMenuInfo
    android:id="@+id/imageButton6"
    android:scaleType="fitXY"
    android:layout_width="85dp"
    android:layout_height="85dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:background="@null"
    android:src="@drawable/dotted_box"
    android:contentDescription="@string/acc_seatButton" />

<en.deco.android.livehud.ImageButtonWithContextMenuInfo
        android:id="@+id/imageButton7"
        android:scaleType="fitXY"
        android:layout_width="85dp"
        android:layout_height="85dp"
        android:background="@null"
        android:src="@drawable/dotted_box"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:contentDescription="@string/acc_seatButton" />

<en.deco.android.livehud.ImageButtonWithContextMenuInfo
    android:id="@+id/imageButton8"
    android:scaleType="fitXY"
    android:layout_width="85dp"
    android:layout_height="85dp"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:background="@null"
    android:src="@drawable/dotted_box"
    android:contentDescription="@string/acc_seatButton" />

<en.deco.android.livehud.ImageButtonWithContextMenuInfo
    android:id="@+id/imageButton9"
    android:layout_width="85dp"
    android:layout_height="85dp"
    android:layout_alignParentTop="true"
    android:layout_toLeftOf="@+id/nextHandButton"
    android:background="@null"
    android:scaleType="fitXY"
    android:src="@drawable/dotted_box" 
    android:contentDescription="@string/acc_seatButton"/>



<ImageView
    android:id="@+id/table"
    android:scaleType="fitXY"
    android:layout_width="370dp"
    android:layout_height="140dp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:src="@drawable/table_test"
    android:contentDescription="@string/acc_table" />

<ImageButton
    android:id="@+id/nextHandButton"
    android:scaleType="fitXY"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:padding="15dp"
    android:layout_alignBottom="@+id/table"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="24dp"
    android:background="@null"
    android:contentDescription="@string/acc_nextHandButton"
    android:src="@drawable/next_button_test" />

2 个答案:

答案 0 :(得分:2)

如果您希望容器缩小,则无法指定确切的尺寸,否则您的元素

android:layout_width="85dp"
android:layout_height="85dp"

总是需要85dp。如果屏幕尺寸如果更高那么你会有第一次屏幕截图的间隙,你得到更小的屏幕,某些项目可以剪裁甚至完全关闭屏幕。

在您的情况下,您可能应将所有宽度设置为match_parent,然后在一个容器中的每个元素上设置layout_weight="1",以便它可以传播。如果您想使用RelativeLayout,则需要将所有ImageViews添加到其他LinearLayout中,以正确使用layout_weight

答案 1 :(得分:-1)

dp不代表显示像素,而是代表与密度无关的像素。表示并非所有显示器都提供相同数量的dp,因此如果超过设备的dp分辨率,则不会按预期呈现布局。