用户界面 – BlackBerry – 可用屏幕的高度,不包括横幅和标题字段

我想知道我的经理在屏幕上可以获得多少垂直空间(无需滚动).

我想将这个经理放在一个单独的类中,而不是在Screen子类中.理想情况下,我的经理可以被放置在任何屏幕上,而不知道传递给它的屏幕细节 – 这位经理将能够找出屏幕标题/横幅字段未使用的空间.

我可以用很多方法获得屏幕尺寸.这是容易的部分.但它没有考虑标题/横幅字段.

我想知道的是如何找到任何标题或横幅字段未涵盖的屏幕部分?但我希望有一个通用的解决方案,可以在一个单独的类文件中使用,而不需要显示它所显示的屏幕的先验知识.

(解决方法:我必须告诉我的经理标题/横幅字段的高度是什么,然后我可以使用这些高度,使用Display.getHeight()来计算可用空间)

最佳答案 我有一个单独的类(称为CobiPainter),它可以被任何管理器或屏幕类使用 – 它实现了一个我称为paintBackground(Graphics g)的方法.我从任何相关的paintBackground(Graphics g)覆盖我想要绘制背景的屏幕中调用此方法.

为了能够被任何主屏幕使用,只需最少的耦合和额外的工作,我已经做到这一点,以便CobiPainter类能够计算可用的屏幕数量,而无需任何标题/横幅/状态字段的知识.

我使用的代码依赖于以下事实:MainScreen有一个内部管理器,我们通常会在其中添加字段.这位经理知道我正在寻找的高度.

这是我使用的黑客/代码:

Screen activeScreen = UiApplication.getUiApplication().getActiveScreen();
if (activeScreen instanceof MainScreen)
{
    // get available height excluding banner / title
    XYRect xy = ((MainScreen) activeScreen).getMainManager()
        .getExtent();
    heightOfTitleAndBanner = xy.y;  // <---- can be useful too
    availableHeight = xy.height;    // <---- this is what I wanted
}

在显示相关管理器之前,此代码将不起作用,因为它依赖于调用getActiveScreen()方法.它还要求使用参数Manager.NO_VERTICAL_SCROLL创建MainScreen以强制它获取屏幕的大小(感谢Himanshu).

点赞