在设计安卓应用时,我应该考虑哪种屏幕分辨率?

6

我搜索了一段时间,想知道在设计Android应用之前应该考虑哪种屏幕分辨率。

我找到了这些信息:

超大屏幕至少为960dp x 720dp

大屏幕至少为640dp x 480dp

普通屏幕至少为470dp x 320dp

小屏幕至少为426dp x 320dp

开发Android应用时应考虑哪些设备分辨率?

但实际上这不是我想要的。

我想知道的是,我是否应该为每种分辨率单独设计我的应用程序,还是仅考虑最常用的分辨率。

或者

如果我没有使用任何硬编码的值来定义宽度、高度和边距等,那么我永远不需要担心屏幕分辨率。

或者

这个方法如何 - 使用显示度量来查找设备的宽度和高度,并根据这些值动态创建所有视图?


1
你应该设计你的应用程序为分辨率无关性,就像桌面和Web开发者已经做了几十年一样。 - CommonsWare
4个回答

7

我应该为每种分辨率设计我的应用程序,还是只考虑最常用的分辨率。

您应该确保您的应用程序在所有屏幕上都能正常工作,而不仅仅是最受欢迎的屏幕。建议您从下往上开始...... 首先确保它在小/正常屏幕上能够正常工作(这样一来,您就可以确保它在所有屏幕上都能正常工作)。然后,您可以使用多面板布局等方式优化平板电脑的布局。

如果我没有使用任何硬编码的宽度、高度和边距等数值,我就永远不需要担心屏幕分辨率。

不确定您想表达什么,但您应该始终注意不同的屏幕分辨率,使用dp(密度无关像素)而不是px

使用Display Metrics查找设备的宽度和高度,并根据这些值动态创建所有视图?

这应该是最后的选择。大多数情况下,您的布局不会那么复杂,也不需要这么做。很多时候,您会使用wrap_contentmatch_parent来设置宽度/高度,而且经常会使用RelativeLayout来相对于其他视图定位。只有在绝对必要时,才需要测量视图的宽度/高度。


我的意思是第二点...只使用wrap content、fill parent、match parent等,而不是10dp/10px。 - Archie.bpgc
1
你不应该使用 px,因为它在不同密度的设备上无法很好地缩放。只要不过分,使用 dp 是可以的。例如,如果你有一个宽度为 20dp 的按钮,在99%的情况下都是完全可以接受的。你只需要注意边界...例如,如果你将按钮的宽度设置为超出屏幕边缘,那么这时你就需要使用显示度量来检查屏幕的宽度。但是,这种情况并不会经常发生。这也是为什么简单布局和少量视图可以让你的生活更轻松的另一个原因 :) - Alex Lockwood
1
是的,使用dp是密度无关的,可以使您的布局在具有不同密度的设备上保持一致。这就是为什么使用px是不好的做法...因为不同的设备(具有不同的密度)以不同的方式表示像素。在高分辨率设备上,“100 px”可能只有半英寸长,而在低分辨率设备上,“100 px”可能有2英寸长。好吧,也许这些测量值有点不切实际,但您明白了:)。很高兴它能帮到您。 - Alex Lockwood
顺便提一下,我假设你已经阅读了这篇文章:http://developer.android.com/guide/practices/screens_support.html - Alex Lockwood
我不知道他为什么需要知道像素的确切数量... 就我而言,他真正需要做的就是设计一个在矩形屏幕上运行良好的布局,对吧?你的工作是确保它适用于多个Android设备... 图形设计师只需要负责布局。你还应该确保他熟悉Android导航/指南,如开发者网站中的“设计”部分所述。另外... 也许他只是在问纵横比,而不是确切的像素数量。 - Alex Lockwood
显示剩余4条评论

4
我认为,你应该编写应用程序,以支持每个设备。从这里详细介绍的启动器图标(针对不同的屏幕尺寸使用不同的分辨率):http://developer.android.com/guide/practices/ui_guidelines/icon_design_launcher.html 到你的应用程序布局,都应该设计成与屏幕大小相关(通过使用match_parent和wrap_content等属性)。
你可以尝试编写代码,发现屏幕大小后动态创建视图,但我认为采用第一个想法更容易且同样有效!

所以你正在详细说明我的第二点,对吗?如果我正确理解了你的回答。 - Archie.bpgc
是的,如果我没有使用任何硬编码的宽度、高度和边距等数值,我就不需要担心屏幕分辨率。 - barbiepylon

3
最好的选择是使用简单的高度和宽度获取参数动态地获取屏幕的宽度和高度。
DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        int height = displaymetrics.heightPixels;
        int wwidth = displaymetrics.widthPixels;

另一种选择是为具有最高屏幕宽度和高度的设备创建它,然后在相应的屏幕尺寸上进行数学处理。


2

好的,建议为所有尺寸设计。但我知道这会增加很多额外工作量。

因此,您可以为您的目标设备设计最大的尺寸,并根据它们的大小调整图像,不要使用硬编码的值,而是使用wrap_contentfill_parent

是的,动态调整图像是个好主意,即使这需要更多的编码工作。这是我使用的技术。


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