在布局编辑器中布局看起来很好 - 完全不在仿真设备上

时间:2012-03-30 08:19:12

标签: android xml android-layout android-emulator xml-layout

例如:我将为galaxy选项卡进行布局(使用编辑器)。当我运行galaxy tab模拟器时,我的圆圈将遍布其“屏幕”。如果我为较小的手机进行布局然后运行手机的模拟器,我会得到相同的结果 - 我的圈子放在我定义的其他地方。好像编辑器像我想要的那样设置我的圈子 - 相对于imageview,它们被置于顶部。但是,设备似乎相对于模拟设备屏幕的大小放置圆圈。

我尝试使用viola_desmond_pic.getWidth()和viola_desmond_pic.getHeight(),这样我就可以以编程方式布置圆圈,但它们只返回屏幕的大小而不是视图。我理解dp并计划不同的密度但是,布局编辑器/模拟器的差异是疯狂的。

  1. 是否有其他人有此差异问题?我很可能会忽略一些东西。
  2. 如果我决定跳过XML,我怎样才能获得Imageview的准确大小,“viola_desmond_pic”并从特定边缘以百分比进行布局?
  3. 这是我的“layout-xlarge”文件夹中的XML。我的目标是Android 2.1

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout04"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
    
    <ImageView
        android:id="@+id/viola_desmond_pic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:contentDescription="@string/desc"
        android:scaleType="fitCenter"
        android:src="@drawable/viola_desmond" />
    
    <ImageView
        android:id="@+id/keyhole"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="160dp"
        android:layout_marginTop="95dp"
        android:adjustViewBounds="true"
        android:contentDescription="@string/desc"
        android:scaleType="fitCenter"
        android:src="@drawable/circle3" />
    
    <ImageView
        android:id="@+id/gun"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/keyhole"
        android:layout_alignRight="@+id/cat"
        android:layout_marginRight="42dp"
        android:adjustViewBounds="true"
        android:contentDescription="@string/desc"
        android:paddingBottom="35dp"
        android:paddingLeft="60dp"
        android:paddingRight="50dp"
        android:scaleType="fitCenter"
        android:src="@drawable/circle3" />
    
    <ImageView
        android:id="@+id/popcorn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="61dp"
        android:layout_marginLeft="83dp"
        android:layout_toRightOf="@+id/keyhole"
        android:adjustViewBounds="true"
        android:contentDescription="@string/desc"
        android:paddingBottom="10dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:paddingTop="20dp"
        android:scaleType="fitCenter"
        android:src="@drawable/circle3" />
    
    <ImageView
        android:id="@+id/pen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="24dp"
        android:layout_marginTop="46dp"
        android:adjustViewBounds="true"
        android:contentDescription="@string/desc"
        android:paddingBottom="140dp"
        android:paddingTop="140dp"
        android:src="@drawable/circle3" />
    
    
    </RelativeLayout>
    

1 个答案:

答案 0 :(得分:2)

我遇到了类似的问题,模拟器没有使用正确的资源 - 即它选择中密度并扩大规模,这可能导致它们出现差异。它值得在textview中删除,在每个布局中都有一些描述性文本,并在第一种情况下对此进行测试。

在ViewTreeObserver的preDraw方法中,您可以尝试使用iv.getMeasuredHeight和getMeasuredWidth。我尝试避免这样做,然后玩布局。我很确定你不能在Java中指定布局的百分比,但是你可以从可用的屏幕尺寸中计算出所需的高度和宽度,并使用RelativeLayout.LayoutParams相应地调整你的图像视图并将参数分配给你的imageview。通过这种方式,您可以非常手动控制尺寸。

希望这有帮助。

杰森