我想知道我的经理在屏幕上可以获得多少垂直空间(无需滚动).
我想将这个经理放在一个单独的类中,而不是在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).