0

是否可以对所有屏幕密度使用通用 hdpi 文件夹?我有很多图像。如果我将特定副本复制到文件夹 drawable-hdpi、drawable-ldpi、drawable-xhdpi ……但它需要大量数据(背景、位图)。

是否可以为所有设备仅设置一个可绘制文件夹,然后以编程方式根据特定设备重新缩放?

我考虑这段代码来获取屏幕的显示大小:

Display display = getWindowManager().getDefaultDisplay();
width = display.getWidth();
height = display.getHeight();

然后我将获得设备的显示密度,如下所示:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
density = metrics.density; // 1 - 1,5 - 2 .....

我将用密度重新计算 imageview 的大小:

ImageView logo = (ImageView)findViewById(R.id.logo);
LinearLayout.LayoutParams logo1 = (LinearLayout.LayoutParams) logo.getLayoutParams();
logo1.width = (int)(logo.getWidth()*density);
logo1.height = (int)(logo.getHeight()*density);
logo1.leftMargin=(int)(logo1.leftMargin*density);   // for margin
logo1.topMargin=(int)(logo1.topMargin*density);   // for margin
logo1.rightMargin=(int)(logo1.rightMargin*density);   // for margin
logo1.bottomMargin=(int)(logo1.bottomMargin*density);   // for margin

我的主要问题是我需要在所有设备上拥有相同比例的图形。这意味着我必须根据屏幕尺寸重新计算 imageViews。

这是获得密度独立屏幕的正确方法吗?如果只有 hdpi 文件夹包含文件,android 如何在其他设备上工作。它是否从该文件夹中获取文件?我可以将一个通用的可绘制文件夹设置为所有密度吗?

4

1 回答 1

2

我强烈(强烈)建议不要这样做。但是,如果您希望系统重新调整您的图像资产,请将它们设计为mdpi(基线密度)并将它们放入drawable/.

也就是说,您至少需要 mdpi 和 hdpi 才能获得合理的缩放(因为 hdpi 是 1.5 倍 mdpi,缩放算法产生的结果比其他转换更差mdpi)。

在开始处理资源之前,请确保您已阅读并理解提供资源支持多个屏幕。

PS 由于几个原因,布局解决方案是错误的(例如,设置边距而不是大小),但它也是完全错误的做法。不要这样做!

于 2013-04-19T12:00:14.783 回答