android在多种屏幕尺寸下使用边距

问题描述:

嗨我已经创建了一个应用程序,我想要在多个屏幕上运行我在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

那么使用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