5

ビューを拡張するカスタムクラスといくつかのボタンで相対レイアウトを使用しようとしています。これは私が最終的にそれをどのように見せたいかです:

http://imgur.com/B5MtdJ7

(画像ではなくリンクを投稿することを許してください、どうやら私はまだ十分にクールではありません)

現在、これはdpの高さでハードコーディングされており(以下のXMLを参照)、これには2つの問題があります。

  • Nexus 7の画面でのみ許容できるように見え、他のデバイスでは許容できないように見えます
  • 両方のカスタムビューのonDrawメソッドは、デバイスの解像度と正確に一致する高さと幅のキャンバスを提供します

layout_heightをwrap_contentに設定しようとすると、各カスタムビューは画面全体を占有しようとします。これは、箇条書き2と一致しているように見えますが、明らかに私が望むものではありません。

私が達成したいのは、2つのカスタムビューを備えた相対レイアウトです。これは、画像に示されているとおりに見えますが、画面のサイズに合わせて拡大縮小され、カスタムビューキャンバスは実際に画面の一部の大きさを認識します。それは座っています。どうすればよいですか?

編集:これが「vsプログラマティック」である理由は、メジャーをオーバーライドすることは悪い叫びではないと思うからですが、それがXMLとどのように相互作用するかはわかりません。レイアウトの定義も1か所にまとめたいです。

私のXMLは以下のとおりです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".TrajectoryView" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.5" >

    <com.sportsim.virtualcricket.view.SideProfileView
        android:id="@+id/side_profile_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </com.sportsim.virtualcricket.view.SideProfileView>
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.5" >

    <com.sportsim.virtualcricket.view.BirdsEyeView
        android:id="@+id/birds_eye_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.25"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/button1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="0.5"
        android:text="Button" />

    <Button
        android:id="@+id/button2"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="0.5"
        android:text="Button" />
</LinearLayout>

4

1 に答える 1

1

LinearLayout と weights を使用すると、これはかなり簡単になります。以下に例を示しましたが、現時点ではテストできません。ただし、何らかの方向性を提供する必要があります。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".TrajectoryView" >

<com.sportsim.virtualcricket.view.SideProfileView
    android:id="@+id/side_profile_view"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.5"/>

<com.sportsim.virtualcricket.view.BirdsEyeView
    android:id="@+id/birds_eye_view"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.25" />

<LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.25"
    android:orientation="horizontal">

<Button
    android:id="@+id/button1"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="0.5"
    android:text="Button" />

<Button
    android:id="@+id/button2"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="0.5"
    android:text="Button" />

</LinearLayout>
</LinearLayout>
于 2013-03-21T09:59:51.933 に答える