在我的应用程序的一部分中,我使用以下方法检查屏幕密度:
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(small)、SomeImagem(medium)、SomeImagel(large)、SomeImagex(xlarge) - 然后我使用 imageName从我从 jar 文件中提取的图像中创建一个可绘制对象。
我看到这在我的 mdpi 屏幕设备上工作正常 - 但在模拟器上我没有图像显示在它们应该出现的位置。
我想也许我只是在某个地方犯了一个愚蠢的错误,所以即使我的 sdpi 为 1.5,我也将 ApplicationConstants.screenSize 更改为“中等”,并且仍然没有在模拟器运行时加载图像。
有人遇到过这个问题吗?
注意:我以这种方式加载图像的原因是因为它是一个模块化的ImageLoader 类,可以从 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 并返回与该名称匹配的可绘制对象(即在我的模块的 jar 中具有该名称的图像文件)。ModularImage 加载器与我的模块加载器一起工作 - 确保为其相应模块加载正确的 imageLoader。
知道为什么状态在这种情况下不起作用吗?感谢您提供任何帮助...我是否错误地使用了状态?