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

然后为每个需要的特定设备限定符(例如values-largevalues-sw600dpvalues-xlarge等)添加一个XML,并根据需要修改该值。如果要在布局中使用这些尺寸,请使用:
android:layout_margin="@dimen/my_view_margin"

android会为它运行的任何设备选择正确的值。

09-10 12:42
查看更多