设置边距 - 期望像素,获得dps?

时间:2011-04-24 07:34:38

标签: android android-emulator

这是令人烦恼的事情之一,事情正在发挥但我不知道为什么。根据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。

知道发生了什么事吗?

3 个答案:

答案 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中?

此致

奥利弗