0

我会尽量准确。我写了一个应用程序,完整的代码本身并不重要

public void onWindowFocusChanged(boolean hasFocus){
    super.onWindowFocusChanged(hasFocus);

    if(hasFocus){
        globalWidth = mainLayout.getWidth();
        refillData();
    }
}

它在我的设备上完美运行(sgs2 DarkyROM hd2.1 android 版本 4.0.3 也在基于 sgs2 的 2.3 版本的系统上检查过它),另一个带有 PilotX2.1 的 sgs2,它也适用于 ASUS Transformer (android v4.2.1) 和许多其他具有不同屏幕尺寸的设备。我必须说它具有不同的外观,具体取决于它运行的设备(它动态构建主布局,因此如果应用程序运行正确,它确实值得注意)。

但在某些设备上它有奇怪的行为。例如,在运行 android 版本 2.3.5 的 HTC (htc sense 2.1) 上,它以某种方式在 getWidth() 行返回一半或实际屏幕的宽度。或者 sgs2 4.2.1 android 版本它也返回奇怪的结果。

我试图在谷歌和堆栈溢出中查找,以了解是否有任何特定的系统差异应该考虑对应用程序有如此大的影响,但没有。我不使用任何可以由系统开发人员以不同方式实现的设备的特定硬件。

什么问题是我没有考虑到的?不同的内核会不会对我的应用程序造成“有问题”的行为?我以为可能是不同的 ROM,但我检查了至少 6-8 个不同的 ROM,没有问题。

如果有人熟悉该主题或遇到类似情况,我什至会很高兴提供网页链接。我真的很沮丧。

4

1 回答 1

0

也许您可以使用View.makeMeasureSpec更正您的措施

mainLayout.measure(
        MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
        MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

int height = mainLayout.getMeasuredHeight();
int width = mainLayout.getMeasuredWidth();
于 2013-03-27T16:58:25.797 回答