У меня есть отдельный класс (назовите его CobiPainter
), который может использоваться любым менеджером или классом экрана - он реализует один метод, который я назвал paintBackground(Graphics g)
.Я вызываю этот метод из любого связанного paintBackground(Graphics g)
переопределения экрана, фон которого я хочу нарисовать.
Для того, чтобы его можно было использовать любым MainScreen
, с минимальными связями и дополнительной работой, ясделали так, чтобы класс 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()
.Также требуется, чтобы MainScreen
был создан с параметром Manager.NO_VERTICAL_SCROLL
, чтобы заставить его принять размер экрана (спасибо Химаншу).