使布局在所有设备上都很好看

时间:2013-12-30 18:09:43

标签: android xaml android-layout

我正在使用模拟器来构建我的第一个Android应用程序。当我使用realease .apk在手机上发布我的应用时,我没有获得所需的结果。

<Button
    android:text="Log In"
    android:layout_width="match_parent"
    android:layout_height="100px"
    android:layout_marginTop="482px"
    android:id="@+id/loginButton"
    android:background="#76988F"
    />

我想要的是有人解释如何在任何设备上设置按钮或任何其他界面控件。所有设备都不同,所以假设我把这样的边距放在我的XAML中并启动模拟器,我将看到以下界面:

-----------------------
|                     |
|                     |
|                     |
|                     |
|                     |
|                     |
|                     |
|                     |
|     MyButton        |
-----------------------

但是当我在我的设备上启动它时,该按钮将出现在其他地方:

-----------------------
|                     |
|                     |
|                     |
|       MyButton      |
|                     |
|                     |
|                     |
|                     |
|                     |
-----------------------

可能是因为根据我所使用的设备和我之前尝试的模拟器,x pixels的边距不会将我带到同一个地方。如何让这些控件在所有设备上保持良好的位置?

有点难以搜索该信息,因为我没有让元素留在固定位置的方式的名称。

4 个答案:

答案 0 :(得分:3)

由于有许多设备具有如此多的不同屏幕尺寸,分辨率等,因此在放置布局元素时,您必须避免使用绝对位置。 Android SDK有一些强大的结构来避免绝对定位(即LinearLayout,RelativeLayout),所以尝试使用它们而不是定义像“12dp”这样的位置,使用layout_width,layout_height(wrap_content或match_parent)和layout_weight的正确组合,可以帮助您放置布局元素而不指定绝对位置。

答案 1 :(得分:3)

看到你的代码我认为的第一件事是

  • 请勿在应用程序代码中使用硬编码像素值。

您应该参考Best Practices。正如医生说的那样

  

出于性能原因并保持代码更简单,Android系统使用像素作为表达维度或坐标值的标准单位。这意味着视图的尺寸始终使用像素在代码中表示,但始终基于当前的屏幕密度。例如,如果myView.getWidth()返回10,则当前屏幕上的视图宽度为10像素,但在具有更高密度屏幕的设备上,返回的值可能为15.如果在应用程序代码中使用像素值使用未针对当前屏幕密度进行预缩放的位图,您可能需要缩放在代码中使用的像素值以匹配未缩放的位图源。

答案 2 :(得分:1)

你犯的另一个错误是使用px。实际上,屏幕具有不同的密度,并且取决于该密度,像素具有不同的尺寸。所以你可能更喜欢使用dp,一种密度相关的测量单位。至于你的文字大小,你必须使用sp。

答案 3 :(得分:0)

使用此归因android:layout_marginTop="482px"时,不应使用px。 你应该使用dp。