在我的应用程序的一部分中,我使用以下方法检查屏幕密度:
float sdpi = ApplicationConstants.ref_currentActivity.getResources().getDisplayMetrics().density;
if(sdpi == 0.75)
{
ApplicationConstants.screenSize = "small";
}
else if(sdpi == 1.0)
{
ApplicationConstants.screenSize = "medium";
}
else if(sdpi == 1.5)
{
//Message.inform("Setting Screen Size", "sdpi is:" + sdpi + " so screen size is large");
ApplicationConstants.screenSize = "large";
}
else if(sdpi == 2.0)
{
ApplicationConstants.screenSize = "xlarge";
}
然后在另一部分我只是有一个加载右图像位图的方法,基于screenSize:
if(ApplicationConstants.screenSize.equals("small"))
{
imageName = imageName + "s";
}
else if(ApplicationConstants.screenSize.equals("medium"))
{
imageName = imageName + "m";
}
else if (ApplicationConstants.screenSize.equals("large"))
{
imageName = imageName + "l";
//Message.inform("ImageName should have an l at the end", imageName );
}
else imageName = imageName + "x";
所以基本上 - 如果我调用findImageByName(“SomeImage”), 然后图像名称将根据屏幕密度更改为SomeImages(小),SomeImagem(中),SomeImagel(大),SomeImagex(xlarge) - 然后我使用imageName从我从jar文件中提取的图像中创建一个drawable。
我看到这在我的mdpi屏幕设备上运行得很好 - 但在模拟器上我没有显示它们应该在哪里的图像。
我想也许我只是在某个地方犯了一个愚蠢的错误,所以我将ApplicationConstants.screenSize更改为“中等”,即使我的sdpi为1.5,仍然没有在模拟器运行时加载图像。
有人遇到过这个问题吗?
注意:我以这种方式加载图像的原因是因为它是一个modularImageLoader类,它从jar文件加载图像。 jar文件包含我在运行时使用DexClassLoader动态加载的.class所需的图像。如果有人对动态模块加载的过程有任何疑问 - 请随意询问,我将解释为什么我按照我的方式加载图像。
任何帮助表示赞赏:)同伴StackOverflowers。
注意:我目前无法访问hdpi-real life Android设备。否则我会在那里测试一下是否有效。
修改
我已经设法让它在模拟器上运行 - 但这不使用状态...我最终需要在按钮上使用它们以确保它们看起来像是被点击了。
以下是有效的:
B [I] .setBackgroundDrawable(ApplicationConstants.moduleImageLoader.findImageByName(drawable_normal));
,这是不起作用的:但应该!
states.addState(new int [] {},ApplicationConstants.moduleImageLoader.findImageByName(drawable_normal)); B [I] .setBackgroundDrawable(状态);
b是一组按钮。 ApplicationConstants.modularImageLoader获取当前模块的正确imageLoader。 findImageByName采用“imageName”根据屏幕密度附加s,m,l,x并返回该名称的drawable匹配(即在我的模块jar中具有该名称的图像文件)。 ModularImage加载程序与我的模块Loader密切配合 - 确保为其相应的模块加载正确的imageLoader。
知道为什么州在这种情况下不起作用?任何帮助表示赞赏......我使用状态不正确吗?
答案 0 :(得分:1)
除非那些是拼写错误,否则我认为您最可能的问题是假设密度与屏幕尺寸相对应。实际上,它很可能与您编码的内容相反(例如,密度越高,屏幕尺寸越小 - 通常),因为屏幕越大,像素的传播越远,导致更低密度。当然,可以增加屏幕分辨率以补偿并提高密度,但在大多数情况下,密度更高的屏幕比密度更低的屏幕更小。
答案 1 :(得分:0)
我相信有多种可能性,例如: