Android不同屏幕尺寸的布局设计

9
我正在为一个Android应用程序进行布局方面的斗争。我已经为不同的屏幕尺寸定义了不同的布局,并且当前的布局目录结构如下:
- layout - layout-land - layout-small - layout-xlarge - layout-xlarge-land
问题是主要的布局目录文件会在3.7到7.0之间的范围内显示,这是非常广泛的范围。小屏幕上文字重叠,在小屏幕上调整后,大屏幕上变得非常微小。据我所知,应该将小型布局文件呈现给较小的屏幕,但是这些文件只被android wear设备呈现。layout-xlarge似乎适用于Nexus 9到Nexus 10。
我想知道如何为3.7-5.0和5.0-7.0屏幕尺寸定义不同的布局。

2
你应该使用尺寸限定符,而不是配置限定符,以获得更多的控制。 - maRShmallow
正如@maRShmallow所指出的那样,您列出的尺寸限定符自Android API 13级以来已被弃用。更可靠的分类系统是sw <N> dp配置限定符,它定义了正在使用的屏幕的最小宽度(sw)以dp为单位。例如,我遇到过将Nexus 6分类为“平板电脑”的尺寸限定符,但我能够通过知道该设备在sw600dp以下来解决此问题,这是标准7英寸平板电脑的截止点。来源:https://developer.android.com/guide/practices/screens_support.html#support - M. Palsich
谢谢,但是sw<N>dp限定符也有同样的问题。320dp布局文件在3.76.0上显示。有什么解决方案吗? - Alena
不需要制作多个布局,只需记住不要固定布局的大小。 - Farhana Naaz Ansari
5个回答

23
答案已经由user5594218给出,但看起来你仍然不清楚(也许你是初学者)。
所以,这里是逐步指南 解决方法1:(简短易懂)
  1. 导航到app > src > main > res

  2. 通过复制和粘贴重复布局目录

  3. 重命名复制的目录,例如 layout-sw300dp

解决方法2:(有点冗长)
  1. 创建新的资源目录:res > New > Android resource directory

Create new resource directory

  1. 选择Resource Typelayout

  2. 在目录名称中添加sw<N>dp,例如layout-sw300dp,然后点击OK

enter image description here

  1. 导航到app > src > main > res

  2. 将布局XML文件复制到新目录中

  3. //repeat process for other qualifiers
    

支持所有屏幕的限定符列表:

  • layout-sw300dp
  • layout-sw330dp
  • layout-sw480dp
  • layout-sw600dp
  • layout-sw720dp

测试:

如果你做对了,它会像这样: enter image description here

有关更多详细信息和示例,请参见:《Android Application Development All-in-One For Dummies》


你说得对,现在我完全明白了。非常感谢你的努力 :) - Alena

4
创建以下类似的文件夹:
layout-sw300dp
layout-sw330dp
layout-sw480dp 
layout-sw600dp 
layout-sw720dp 

创建值文件夹,例如
values-sw300dp 
values-sw330dp 
values-sw480dp
values-sw600dp
values-sw720dp

为什么我需要创建不同的值目录?我已经创建了layout-sw320dp,但问题仍然存在。它会为3.76.0渲染320dp文件。 - Alena
值目录需要提及所有视图的大小,例如textview、imageview等。您必须创建我在上面答案中提到的所有布局文件夹。 - MinnuKaAnae
1
检查这个320dp:典型的手机屏幕(240x320 ldpi,320x480 mdpi,480x800 hdpi等)。 480dp:类似Streak的tweener平板电脑(480x800 mdpi)。 600dp:7英寸平板电脑(600x1024 mdpi)。 720dp:10英寸平板电脑(720x1280 mdpi,800x1280 mdpi等)。 - MinnuKaAnae
非常感谢,现在在Atlas_Gondal的指导下我理解了您的回答。 :) 您能给我一个示例或不同的值文件夹吗? - Alena
只是为了澄清,当我使用layout-sw300dp结构时,我不需要使用layout-small等吗?正确的吗? - Alena
显示剩余2条评论

1

导航 应用程序 -> res -> 布局,右键单击,然后选择新建 -> 布局资源文件,正确编写文件名,并从可用的限定符中选择所需的大小。


0
亲爱的,你不需要为各种屏幕声明布局。只需为每个屏幕创建单个布局,并且不要固定布局的宽度和高度。你必须将高度保持为match parent和wrap content,同样也适用于宽度。

-1

你应该在layout-height/layout-width/textsize中尝试使用dp,因为它不受屏幕尺寸的影响。


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