您好我已经创建了一个应用程序,我希望在多个屏幕上运行我在HDPi上构建了整个内容。当我在一个更大屏幕的更新的Android手机上运行它时,对齐的东西就出来了。我知道这是因为我设置了使用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
屏幕xhdpi
答案 0 :(得分:13)
使用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-large
,values-sw600dp
,values-xlarge
等),并根据需要修改该值。如果要在布局中使用这些尺寸,只需使用:
android:layout_margin="@dimen/my_view_margin"
Android会为正在运行的设备选择正确的值。