3

こんにちは私はHDPiですべてを構築した複数の画面で実行したいアプリを作成しました。そして、私がそれをより大きな画面を備えた新しいアンドロイド電話で実行すると、ものの配置が外れます。これは、DPを使用して物を配置するためのマージンを設定したためです。

私の質問は、複数の画面サイズにわたってマージンを使用するためのベストプラクティスは何ですか、および/または画面サイズに基づいてDPを分割/乗算できる設定可能なコードはありますか?

できるだけ多くのデバイスでアプリを入手したいと思っています。しかし、これは私の最初のアプリなので、これを行う方法が完全にはわかりません。ですので、どんな助けでも大歓迎です。

これが私のレイアウトの例です

<?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="20dip"
    android:background="@drawable/bg_tablecell"
    android:orientation="horizontal"
    android:weightSum="1"
     >

       <TextView
        android:id="@+id/position"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_centerVertical="true"
        android:paddingLeft="4dip"
        android:text="@string/POS"
        android:textSize="15dip"
        android:textColor="@color/blue"
         />

    <TextView
        android:id="@+id/TeamName"
        android:layout_width="90dip"
        android:layout_height="wrap_content"
        android:layout_marginLeft="23dip"
        android:ellipsize="end"
        android:gravity="left"
        android:lines="1"
        android:text="@string/Team"
        android:textColor="@color/blue"
        android:textSize="15dip"
        android:textStyle="bold" 
        android:layout_centerVertical="true"/>

    <TextView
        android:id="@+id/played"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/TeamName"
        android:layout_alignBottom="@+id/TeamName"
        android:layout_marginLeft="35dip"
        android:layout_toRightOf="@+id/TeamName"
        android:gravity="center"
        android:text="@string/Zero"
        android:textColor="@color/blue"
        android:textSize="10dip" 
        android:layout_centerVertical="true"/>

    <TextView
        android:id="@+id/won"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/played"
        android:layout_alignBottom="@+id/played"
        android:layout_marginLeft="17dip"
        android:layout_toRightOf="@+id/played"
        android:gravity="center"
        android:text="@string/Zero"
        android:textColor="@color/blue"
        android:textSize="10dip" 
        android:layout_centerVertical="true"/>

    <TextView
        android:id="@+id/drawn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/won"
        android:layout_alignBottom="@+id/won"
        android:layout_marginLeft="16dip"
        android:layout_toRightOf="@+id/won"
        android:gravity="center"
        android:text="@string/Zero"
        android:textColor="@color/blue"
        android:textSize="10dip" 
        android:layout_centerVertical="true"/>

    <TextView
        android:id="@+id/lost"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/drawn"
        android:layout_alignBottom="@+id/drawn"
        android:layout_marginLeft="16dip"
        android:layout_toRightOf="@+id/drawn"
        android:gravity="center"
        android:text="@string/Zero"
        android:textColor="@color/blue"
        android:textSize="10dip" 
        android:layout_centerVertical="true"/>

    <TextView
        android:id="@+id/goalsFor"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/lost"
        android:layout_alignBottom="@+id/lost"
        android:layout_marginLeft="16dip"
        android:layout_toRightOf="@+id/lost"
        android:gravity="center"
       android:text="@string/Zero"
        android:textColor="@color/blue"
        android:textSize="10dip" 
        android:layout_centerVertical="true"/>

    <TextView
        android:id="@+id/goalsAgainst"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/goalsFor"
        android:layout_alignBottom="@+id/goalsFor"
        android:layout_marginLeft="17dip"
        android:layout_toRightOf="@+id/goalsFor"
        android:gravity="center"
        android:text="@string/Zero"
        android:textColor="@color/blue"
        android:textSize="10dip" 
        android:layout_centerVertical="true"/>

    <TextView
        android:id="@+id/Difference"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/goalsAgainst"
        android:layout_alignBottom="@+id/goalsAgainst"
        android:layout_marginLeft="15dip"
        android:layout_toRightOf="@+id/goalsAgainst"
        android:gravity="center"
        android:text="@string/Zero"
        android:textColor="@color/blue"
        android:textSize="10dip" 
        android:layout_centerVertical="true"/>

    <TextView
        android:id="@+id/points"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/Difference"
        android:layout_alignBottom="@+id/Difference"
        android:layout_marginLeft="18dip"
        android:layout_toRightOf="@+id/Difference"
        android:gravity="center"
        android:text="@string/Zero"
        android:textColor="@color/blue"
        android:textSize="10dip" 
        android:layout_centerVertical="true"/>

スクリーンhdpi

hdpi

画面xhdpi

xhdpi

4

1 に答える 1

15

DP を使用することの全体的なポイントは、これについて心配する必要がないようにすることです。マージンはデバイス間でほぼ同じになりますが、特定のデバイスの解像度/密度の組み合わせで物事を並べることに依存している場合、他のデバイスでテストすると間違いなく驚くでしょう.

とはいえ、画面サイズごとに異なるマージンを指定する必要がある場合は、次のres/valuesようなXML ファイルを追加するだけdimens.xmlです。

<resources
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <dimen name="my_view_margin">10dip</dimen>
</resources>

次に、必要な特定のデバイス修飾子 ( 、 、 など) ごとにこれらの XML のいずれかを追加し、必要に応じてvalues-largevalues-sw600dpvalues-xlarge変更します。これらの寸法をレイアウトで使用する場合は、次を使用します。

android:layout_margin="@dimen/my_view_margin"

Android は、たまたま実行されているデバイスに応じて正しい値を選択します。

于 2012-07-24T14:43:53.117 に答える