这是令人烦恼的事情之一,事情正在发挥但我不知道为什么。根据Android API文档和此网站,我预计必须对我的布局参数进行像素密度转换(在此处以原始状态显示):
LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.width = 60; // the following three should be pixels, right??
lp.height = 80;
lp.setMargins(1, 5, 1, 5);
换句话说,我预计上述内容在不同的屏幕密度下效果不佳,因为它们以像素为单位指定。 “问题”是它在我尝试的所有模拟器上工作正常,从低QVGA开始。为了试图理解原因,我使用层次结构查看器检查我的应用程序,发现当我的应用程序有焦点时,视图的宽度(来自getWidth())总是320。比如回到主屏幕,现在HV报告屏幕宽度为480。
知道发生了什么事吗?
答案 0 :(得分:3)
值确实以像素为单位指定。听起来你的应用程序在兼容模式下运行?
答案 1 :(得分:2)
根据http://developer.android.com/guide/practices/screens%5Fsupport.html,如果您未在Manifest中声明支持多个密度,那么它将报告中等分辨率,并且应用程序将表现如此。表示:
如果应用程序声明它确实如此 不支持不同的屏幕 密度,平台自动扩展 任何绝对像素坐标,像素 尺寸值和使用的像素数学 在应用程序中(例如可能是 用于指定宽度或 填充视图)。它这样做 确保像素定义的屏幕 元素显示在 大致相同的物理尺寸 因为他们会在基线 密度“中”(160)。该 平台处理这种扩展 透明地应用程序和 还报告缩放整体像素 相反,应用程序的尺寸 比物理像素尺寸。
例如,假设一个给定的设备 是 使用WVGA高密度屏幕, 这是480x800,差不多 尺寸作为传统的HVGA屏幕,但是 它运行的应用程序说明了这一点 它不支持多个 密度。在这种情况下,系统 会在申请时“撒谎” 查询屏幕尺寸,以及 报告320x533。然后,当应用程序 做绘图操作,如 使矩形无效 (10,10)到(100,100),系统会 同样自动改造 坐标通过缩放它们 适当的金额,实际上 使区域(15,15)无效(150, 150)。同样的事情发生在 其他方向,如果申请是 在较低密度的屏幕上运行, 坐标按比例缩小。
答案 2 :(得分:0)
这是我最近一直在努力的事情。它是你在谈论的anyDensity标签吗?
如果是这样,它在哪里出现在Manifest中?
此致
奥利弗