我刚刚在Android上发布了我的应用程序,并且遇到了高密度显示器客户的问题。
我添加了一个调试的东西,看看有什么进展,这是一个示例输出
设备:Nexus 10 Android版:4.2.2 DisplayMetrics {density = 2.0,width = 2560,height = 1504,scaledDensity = 2.0,xdpi = 298.275,ydpi = 298.823} MainView w = 1900 h = 1342 mDrumKitMode =大 KitView w = 640 h = 1266 x = 1920.0 y = 0.0
主视图是屏幕截图左侧的音乐符号区域,其1900宽(MainView w = 1900 h = 1342)鼓组是一个640w和640高的位图。不知何故,显示器将其缩放为父级的全高(KitView w = 640 h = 1266 x = 1920.0 y = 0.0)。这在密度= 1.0的显示器上不会发生。
我无法测试这个,因为由于某些原因我无法让大型显示器上的模拟器工作,而且我没有高密度平板电脑。
有没有人知道会发生什么?感谢
这是另一位有类似问题的客户
设备:A700 Android版:4.1.1 DisplayMetrics {density = 1.5,width = 1920,height = 1128,scaledDensity = 1.5,xdpi = 224.73732,ydpi = 224.11765} MainView w = 1260 h = 1044 mDrumKitMode =大 KitView w = 640 h = 968 x = 1280.0 y = 0.0
我认为它的scaledDensity = 1.5参数,也许我需要做一些事情来禁用自动图像缩放,即设置scaledDensity = 1?
我应该补充一点,整个应用程序都基于精确的像素位置,无论是音乐符号显示还是鼓组显示,它都覆盖了基本鼓组图像顶部的图像(你可以看到鼓踏板是错误的也放在这个图像上)。我不想自动缩放,因为我在应用程序内处理不同显示尺寸和用户偏好的缩放。
我还应该补充一点,我的所有鼓组图像都是drawable-mdpi,所有其他dpis都是空的。这是因为我根据屏幕尺寸和用户偏好以编程方式缩放图像但是我想也许问题是需要在xhdpi中放置一些图像?我想我能做到这一点,但这将是很多工作。
PS,我想我在这里找到了答案http://developer.android.com/guide/practices/screens_support.html
为不同的屏幕密度提供不同的位图drawable
默认情况下,Android会缩放您的位图drawables(.png,.jpg和.gif文件)和Nine-Patch drawables(.9.png文件),以便它们在每个设备上以适当的物理大小呈现。例如,如果您的应用程序仅为基线(中等屏幕密度(mdpi))提供位图可绘制,则系统在高密度屏幕上进行缩放,并在低密度屏幕上缩小它们。此缩放可能会导致位图中的伪像。为了确保您的位图看起来最好,您应该为不同的屏幕密度添加不同分辨率的替代版本。
我想知道简单地将所有-mdpi图像复制到-xhdpi是否有效?
答案 0 :(得分:1)
如果您打算跨设备使用此应用程序,则别无选择,只能为所有存在的各种密度文件夹(xhdpi,xxhdpi,hdpi,mdpi)输入图像。您还可以考虑更改实际布局,为不同的设备提供不同的布局。
请参阅文档以了解如何处理此问题。 http://developer.android.com/guide/practices/screens_support.html
如果这会创建一个过于沉重的apk(我不知道你有多少图像),那么你可以采用另一种方式指定一个无缩放的drawable文件夹,它只会在设备上使用原生密度的图像。除非你打算只支持mdpi设备,否则使用ONLY mdpi绝对是错误的。