如何准备android屏幕独立图形 - 具体解决方案

时间:2013-04-19 11:47:41

标签: android screen screen-resolution

是否可以将通用hdpi文件夹用于所有屏幕密度?我的照片很多。如果我将特定副本制作文件夹drawable-hdpi,drawable-ldpi,drawable-xhdpi,...但它需要大量数据(背景,位图)。

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

我考虑使用此代码来获取scree的显示大小:

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如何在其他设备上工作。是否需要此文件夹中的文件?我可以将一个常用的drawable文件夹设置为所有密度吗?

1 个答案:

答案 0 :(得分:2)

我强烈建议( 强烈 )反对这样做。但是,如果您希望系统重新缩放图像资源,请将其设计为mdpi(基线密度)并将其放入drawable/

也就是说,你需要至少mdpi和hdpi来获得合理的缩放(因为hdpi是1.5x mdpi,缩放算法产生的结果比来自mdpi的其他转换效果差。)

在开始处理资源之前,请确保您已阅读并理解Providing ResourcesSupporting Multiple Screens

P.S。由于某些原因(例如,设置边距而不是大小),布局解决方案是错误的,但这也是完全错误的事情。不要这样做!