我尝试让我的应用程序支持多个密度。正如我们所知,如果我们想要获得密度值,我们使用类似“getResources()。getDisplayMetrics()。density;”的语法。
我的问题是如何从某个文件夹中获取图片。假设我有一个变量:
float myDensity = getResources().getDisplayMetrics().density;
当myDensity返回1.0时,我想从drawable-mdpi拍摄照片,当它返回0.75时我想从drawable-ldpi拍照,并且与文件夹drawable-xhdpi和文件夹drawable-xxhdpi相同。我试着这样做
treepict.setImageResource(R.drawable-hdpi.tree);
但我得到的只是错误。
任何人都可以帮我怎么做?
答案 0 :(得分:2)
你不能像R.drawable-hdpi.tree
那样设置。仅为每个可绘制树图像创建R.drawable.tree
。如果您使用R.drawable.tree
,系统将根据屏幕密度自动选择。
现在,如果您想要不同的图像以获得不同的分辨率,您可以使用不同的图像在您的应用中显示。
答案 1 :(得分:1)
系统应自动为您执行此操作。
因此,假设您有一张专为每种密度制作的图像image.png
。
您的代码不需要知道实际密度才能运行。它应该专注于将概念图像分配给图像视图。
所以在项目的res文件夹中:
<YourProjectHome>/res/
有文件夹:
drawable-ldpi
drawable-mdpi
drawable-hdpi
drawable-xhdpi
drawable-xxhdpi
drawable-xxxhdpi
只需将特定于每个密度的图像放在相应的文件夹中,并将它们命名为完全相同。在这个例子中,它只是image.png
然后在你的代码中你就可以了
treepic.setImageResource(R.drawable.image);
在某些情况下,您希望将图像指定为特定密度。有一个相当新的调用,getDrawableForDensity()
这个将查找给定密度的drawable的特定版本。然而,对于常见情况,它是矫枉过正的。如果你要进行下采样,那真的是必要的。即你没有hdpi版本的东西,但是你有一个xxxhdpi版本,并希望缩小它看起来半正常。
答案 2 :(得分:1)
您可以为文件夹中的相同图片使用唯一名称: R.drawable-hdpi.tree_hdpi R.drawable-mdpi.tree_mdpi等。
答案 3 :(得分:0)
屏幕上关于像素密度的一切都由Android管理。您不需要设置或定位图像。 android会为你选择图像正确的图像
您可以使用R.drawable.tree
自动为您选择图片
所以只需将所有不同密度的图像放入具有相同名称的相应文件夹中即可。
并通过R.drawable.tree
调用它们Android将根据您的屏幕密度选择正确的
/ drawable应保留给您不关心哪个设备或xml可绘制资产的资产
如果您需要有关屏幕支持解决方案的更多信息,请转到this link