计算不同屏幕的dp以支持多个屏幕

时间:2015-08-14 19:28:27

标签: android

我知道有很多这样的问题,我已经阅读了很多关于此的博客和问题,我对我的理解并不满意。

我想支持多种屏幕和分辨率,如hdpi,xxxhdpi等。 我正在使用dimens.xml来实现此目的。但是仍然不清楚如何计算不同屏幕的精确dp值。

例如,如果48dp x 48dp ImageView适用于hdpi设备,我应该为xxhdpi设备定义什么值?是否有任何固定的计算方法就像可绘制的图像一样?

我正在使用这些文件夹来尝试支持多个屏幕:

values-sw320dp-hdpi
values-sw320dp-xhdpi/xxhdpi/xxxhdpi

我目前面临的问题很少

  • 虽然定义各个dimens.xml中的值几乎适用于大多数设备,但很少有设备采用错误的值

例如,我有Lg optimus G是xhdpi设备,但它从values-sw320dp-xxxhdpi的{​​{1}}而不是xhdpi中读取值

  • 我无法计算每个分辨率的精确值(hdpi,xhdpi等),因此在hdpi设备中看起来很完美的视图在xxxhdpi中似乎有点大或小,因为我无法猜测如果hdpi的值视图大小是48dp然后xxxhdpi应该是64dp或者其他东西,因为我不知道确切的方法。

同时在搜索支持不同的屏幕时,我多次尝试根据密度或计算像素等在运行时计算dp。

我对这一切感到困惑。请帮助我理解和学习制作响应式应用的正确方法。

1 个答案:

答案 0 :(得分:0)

您可以使用resource qualifiers为视图指定不同的尺寸。

如果您希望ImageView的宽度根据屏幕大小而变化,请在名为dimens.xml的{​​{1}}文件中创建一个新维度(例如)。

然后基本上创建了image_view_width的副本,但添加了“大小”限定符。这将创建dimens.xml文件的另一个版本,并且符合您指定资格的任何设备都将使用该版本的dimens.xml。然后,将dimens.xml添加到此新文件中,并为其提供不同的(更小/更大)值。您可以根据需要多次执行此操作,并根据需要使用尽可能多的限定符。

最后,当您想在布局中使用此值时,您只需键入:

image_view_width

和android会为你做其余的事。

希望这有帮助!