多屏幕尺寸的Android布局设计

4

我正在开发一个针对所有屏幕尺寸的Android应用程序?我该如何制作我的布局?我应该为每种类型的屏幕制作不同的layout.xml文件,还是有其他更“高效”的方法可以做到这一点?


是的,我有一种高效处理不同屏幕分辨率下布局的方法,请查看我的答案https://dev59.com/clrUa4cB1Zd3GeqPkoji#16518557。 - Muhammad Babar
3个回答

6
请阅读 支持多屏幕,特别是“屏幕独立的最佳实践”部分。
基本规则:
  • 在XML布局文件中指定尺寸时,使用wrap_content、fill_parent或dp单位(而不是px)。
  • 不要使用AbsoluteLayout。
  • 不要在代码中使用硬编码的像素值。
  • 使用特定于屏幕密度和/或分辨率的资源。
  • 实际上,即使您的布局可以在平板电脑上工作,您也会希望为那些超大设备提供不同的布局,以增强用户体验。

编辑关于您的截图的内容。
<ImageButton
        android:id="@+id/btnSubmit"
        android:src="@drawable/submit"
        android:layout_height="22dp"
        android:layout_width="85dp"
        android:layout_marginTop="15dp"
        android:layout_below="@+id/confirmpassword"
        android:layout_centerInParent="true" />

你在这里指定了两个垂直约束,它们可能不太兼容。尝试使用layout_centerHorizontal而不是layout_centerInParent。
你还可以给RelativeLayout添加gravity="top|center_horizontal"。这样,默认情况下,元素会在水平方向上居中,并紧贴顶部。
另外,尝试将firstnamebtnSignin对齐,而不是username。你可能会有所收获。
RelativeLayout是最复杂的布局之一。如果你花费了一些时间仍然无法解决问题,可以考虑使用嵌套LinearLayout的组合作为替代方案。

我已经使用dp作为单位,我已经阅读了页面,但是当我在大屏幕上查看我的应用程序时,组件会变得混乱。我总是使用相对布局,那么我该如何解决这个问题? - Sultan Saadat
请在您的问题中提供截图,其中一个是标准屏幕截图,另一个显示问题。同时附上布局XML。 - Vincent Mimoun-Prat
这是 XML 文件 http://pastie.org/1814546,这是普通布局 http://yfrog.com/hs409zyj 和大型布局的图片 http://yfrog.com/h7r31ujj。 - Sultan Saadat
嗨,你有机会看到这个了吗? - Sultan Saadat
在编辑的答案中添加了一些注释。我会给你一些提示,但你需要自己大量搜索 :) - Vincent Mimoun-Prat
我遇到了同样的问题。当我在平板电脑上查看我的应用程序时,它完全不同。我快要抓狂了,找不到任何解决这个问题的方法。 - gandarez

2

针对横屏和竖屏模式,您可以使用不同的XML文件,以便根据方向显示屏幕。我一直在使用这种方法来开发应用程序。 对于多屏幕支持,您可以使用相对布局作为父节点,而不是绝对布局。


1

对于任何动态屏幕,您必须采用相对布局,并且所有测量值都将以百分比(%)表示,或者您可以使用属性(填充父级或包裹内容),通过这样做,您可以在不同的屏幕上管理布局。


我已经在使用相对布局,但是根据一些高级开发人员的建议,我使用dp而不是百分比。我需要为每个屏幕制作多个layout.xml文件吗?横向和纵向方向又该怎么办? - Sultan Saadat
1
你可以使用任何布局,但不包括AbsoluteLayout。你不必局限于RelativeLayout。测量单位可以是dp/dip/sp。 - Vincent Mimoun-Prat
显示 display = act.getWindowManager().getDefaultDisplay(); DisplayMetrics displaymetrics = new DisplayMetrics(); 窗口管理器 wn=(WindowManager) context.getSystemService(Context.WINDOW_SERVICE); act.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); - Jazz
现在你明白了吗?(got?) 在编程中,首先要计算屏幕的总可用大小,然后从中决定例如文本视图占5%,图像视图占10%。 - Jazz
在onCreate方法中计算您的总可用屏幕大小,如果宽度为320,则5%的320为16,这适用于您的任何控件,例如TextView等等... - Jazz
真的吗?我必须通过编程来调整所有的图片大小吗? - gandarez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接