0

例: ギャラクシー タブのレイアウトを (エディターを使用して) 行います。Galaxy Tabエミュレーターを実行すると、その「画面」全体に円が散らばります。小さい携帯電話のレイアウトを作成してから携帯電話のエミュレーターを実行すると、同じ結果が得られます。定義した以外の場所に円が配置されます。エディターが私のサークルを私が望むように設定しているようです-それらが上に配置されているイメージビューに相対的です。ただし、デバイスは、エミュレートされたデバイスの画面のサイズを基準にして円を配置しているようです。

viola_desmond_pic.getWidth() と viola_desmond_pic.getHeight() を使用して、プログラムで円をレイアウトできるようにしましたが、ビューではなく画面のサイズを返すだけです。dp とさまざまな密度の計画は理解していますが、レイアウト エディターとエミュレーターの不一致はおかしいです。

  1. 他の誰かがこの不一致の問題を抱えていますか? 私は何かを見落としている可能性が非常に高いです。
  2. XMLをスキップすることにした場合、Imageview「viola_desmond_pic」の正確なサイズを取得し、特定のエッジからパーセンテージでレイアウトを行うにはどうすればよいですか?

「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>
4

1 に答える 1

2

エミュレーターが正しいリソースを使用しないという同様の問題がありました。つまり、中密度を選択してスケールアップすると、不一致が発生する可能性があります。最初のケースでは、説明テキストを含むテキストビューを各レイアウトにドロップし、これをテストする価値があります。

ViewTreeObserver の preDraw メソッドでは、iv.getMeasuredHeight と getMeasuredWidth を使用できます。ただし、これを避けてレイアウトをいじるようにしています。Javaでレイアウト用のパーセンテージを指定できないことは確かですが、使用可能な画面サイズから目的の高さと幅を計算し、それに応じてRelativeLayout.LayoutParamsを使用してイメージビューのサイズを調整し、パラメータをイメージビューに割り当てることができます. このようにして、サイズを非常に手動で制御できます。

お役に立てれば。

ジェイソン

于 2012-03-30T11:18:28.817 に答える