支持Android上的多个屏幕

时间:2012-08-17 10:36:46

标签: android android-layout android-imageview android-image

已阅读doc这篇文章很长但仍然不清楚。

假设我的图像大小= 120px * 80px,在默认的mdpi / 160密度下,我还需要准备

ldpi = 90 * 60
hdpi = 180 * 120
xhdpi = 240 * 160

上面的计算是对的吗?假设我只有一个布局,所以我需要的是准备图像并将它们放在相应的可绘制文件夹下,对吗?

由于

7 个答案:

答案 0 :(得分:3)

根据formula from Google

,您计算出的图像尺寸正确无误
pixels = dp * (density / 160)

了解各种DPI的目标密度将允许我们计算最终图像尺寸:

ldpi = 120 DPI
mdpi = 160 DPI
hdpi = 240 DPI
xhdpi = 320 DPI

这是宽度的正确计算,从120像素宽的中密度资产开始:

ldpi  (120 DPI) = 120 * (120 / 160) == 90
mdpi  (160 DPI) = 120 * (160 / 160) == 120
hdpi  (240 DPI) = 120 * (240 / 160) == 180
xhdpi (320 DPI) = 120 * (320 / 160) == 240

这是正确的高度计算,从80像素高的中密度资产开始:

ldpi  (120 DPI) = 80 * (120 / 160) == 60
mdpi  (160 DPI) = 80 * (160 / 160) == 80
hdpi  (240 DPI) = 80 * (240 / 160) == 120
xhdpi (320 DPI) = 80 * (320 / 160) == 160

制作最终图片:

ldpi = 90 x 60
mdpi = 120 x 80
hdpi = 180 x 120
xhdpi = 240 x 160

res / 下创建以下文件夹(如果它们尚不存在)并删除正确的资源:

  • drawable-ldpi
  • 抽拉-MDPI
  • 抽拉-HDPI
  • 抽拉-xhdpi

答案 1 :(得分:2)

是的,这些是正确的尺寸。

是的,只需将各种版本放入res / drawable-ldpi,-mdpi,-hdpi和-xhdpi 文件夹,你已经完成了。

根据您的图像 - 特别是它是否仍然可以自动缩小 - 您可以只提供hdpi和xhdpi版本,Android将分别在运行时自动缩放它们分别为ldpi和mdpi。

答案 2 :(得分:1)

编辑:好的,计算是正确的。根据{{​​3}}中的公式px = dp * (dpi / 160),其中mdpi = dp上的像素。

以下是一些其他信息:

Dpi告诉你1英寸多少点(像素)。但它并没有告诉你屏幕总共有多少像素。所以,你可以拥有一个设备,它具有400像素的宽度和高度,屏幕的对角线为5英寸。有了这个,你就得到了dpi值。 (例如,使用http://developer.android.com/guide/practices/screens_support.html。)

现在你有另一个设备,它具有相同的dpi值,但具有更高的分辨率并且更大,例如,1000 x 1000像素和大对角线。

如果您为第一种情况创建了一个图像,比方说200 x 200像素,它将占据屏幕的一半,但在第二种情况下,它将只占屏幕的1/5,尽管两种设备都具有相同的效果dpi,这可能不是你想要做的。

我通常做的是定位通常具有此dpi的设备的分辨率(如hdpi - > 480x800,xhdpi - > 720x1280等),并在布局中使用dip与scaleType“fitStart”,“center”等结合使用,以保持图像的比例。所以我把不同分辨率的图像放在ldpi,hdpi和xhdpi文件夹中,但我不使用公式。

在必要的情况下,还可以组合使用屏幕尺寸/代替dpi:

xlarge屏幕至少为960dp x 720dp

大屏幕至少为640dp×480dp

正常屏幕至少为470dp×320dp

小屏幕至少为426dp x 320dp

这适用于其他文件夹,如dpi。

顺便说一句。目前,可以在Google Play中为不同的分辨率/屏幕添加不同版本的应用程序,因此用户无需下载所有文件(巨大的应用程序大小,长时间下载等),只需要下载所需的文件。设备

答案 3 :(得分:0)

ldpi,mdpi,hdpi,xhdpi的图像缩放比例是3:4:6:8但是你想一次 1)如果有移动设备有ldpi小屏幕,那么它将适合屏幕。 2)如果有带有ldpi中等屏幕的移动设备,那么图像会显得稍微小一些 3)2)如果有ldpi大屏幕的移动设备那么图像看起来更小。

对于所有mdpi,hdpi和xhdpi屏幕都是这样的。

如果您的应用中有可能使用九个补丁图像,请尝试这些图像。

答案 4 :(得分:0)

是的,您所做尺寸的计算正确。

现在,您需要将它们放在 ldpi mdpi hdpi xhdpi 的相应文件夹中在项目的 res / drawable 中。

答案 5 :(得分:0)

如果您的目标是让您的图像在不同像素密度的设备上具有(近似)相同的物理尺寸,那么您的计算是正确的。图像将进入目录

  

RES /抽拉-LDPI
  RES /抽拉-MDPI
  RES /抽拉-HDPI
  RES /抽拉-xhdpi

Android将设备分为以下一般密度类别(120dpi,160dpi,240dpi和320dpi)之一,并根据这些比例缩放图像。由于物理设备不一定恰好是这些密度中的一种,因此图像的物理尺寸在设备之间仍然可能略有不同。请注意,如果您不为特定密度提供图像,Android将通过缩放默认/ mdpi图像生成一个图像。一般来说,结果并不是通过提供自己的图像而获得的质量。

如果您运行Android Lint,它会告诉您任何缺少的资源(例如忘记包含xhdpi图像),它还会告诉您缩放计算是否大幅关闭。知道这是一个很好的功能。

请注意,整个图像缩放方法与屏幕尺寸无关,只与像素密度无关。您还可以拥有不同屏幕尺寸的资源文件夹,甚至是不同屏幕尺寸/密度组合的资源文件夹。

但是,如果您希望图像以120 x 80像素显示而不管屏幕密度如何,则上述方案将无效。相反,您应该将图像放在文件夹

  

RES /抽拉-nodpi

Android不会缩放从中检索的图像。结果是你的图像在mdpi设备上约为3/4“x 1/2”,在ldpi设备上为1“x 3/4”,在xhdpi设备上为3/8“x 1/4”,等等

答案 6 :(得分:0)

如果您知道设备的屏幕密度(dpi),则可以使用它来计算等效大小(以像素为单位):

equivalentPixels = sizeInDP *(screenDensity / 160)

其中sizeinDP是要显示图像的窗口小部件的大小。计算各种屏幕密度的像素大小,并将它们放在相应的文件夹下。

因此,如果您的ImageView大小为300dp X 200dp(宽度X高度),并且屏幕密度为320dpi,则图像大小应为:

宽度= 300 *(320/160)= 600px
高度= 200 *(320/160)= 400px

希望这有帮助!