2012-07-24 70 views
3

嗨我已經創建了一個應用程序,我想要在多個屏幕上運行我在HDPi中構建的所有內容。當我用更大的屏幕在更新的android手機上運行它時,對齊的東西就沒有了。我知道這是因爲我已經設定利潤率來定位使用DP的東西。android在多種屏幕尺寸下使用邊距

我的問題是在多種屏幕尺寸下使用邊距的最佳做法和/或是否有一些代碼可以根據屏幕尺寸劃分/放大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

屏幕xhdpi

xhdpi

回答

12

那麼使用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-sw600dp,values-xlarge等)並根據您的需要修改該值。當你想在佈局中使用這些尺寸,只需使用:

android:layout_margin="@dimen/my_view_margin" 

和Android將挑選任何設備恰好是其上運行的正確值。

+0

你看到它很有趣你說這是因爲這就是爲什麼我把它們放在dp中,因爲我認爲這就是我應該做的例如在我的項目上的hdpi手機文本視圖對齊不錯,並且xhdpi其移動到左邊 – 2012-07-24 14:53:58

+0

我懷疑這是你的利潤,那麼你的佈局可能會導致錯位。 – kcoppock 2012-07-24 15:19:11

+0

你能提供截圖嗎? – kcoppock 2012-07-24 15:26:05