Поскольку тема вызывает не поддельный интерес у пользователей. Я расскажу, как это делал я для одной демо программы, которую я готовил для выступления в ИТМО. Сразу приложу скриншот, как это будет выглядеть:
Сразу скажу, что это решение временное и имеет ряд определенных нюансов, которые появятся после его использования. О том, как исправить эти нюансы указано в самом конце.
Теперь к делу. Андроид позволяет сделать статус бар прозрачным с наложением белого цвета с альфа каналом. Это значит, если мы разместим под статус баром зеленый цвет, то статус бар станет соответствующего темно зеленого цвета. Этим и воспользуемся. Основная идея такая:
Говорим Андроиду, что хотим прозрачный статус бар.
Указываем андроиду, что хотим размещать форму под статус баром.
Размещаем под статус баром TRectangle нужного цвета, в тон TToolBar (если используете)
Теперь по шагам:
1. Говорим Андроиду, что хотим прозрачный статус бар. Указываем андроиду, что хотим размещать форму под статус баром.
Создаем файл style.xml со стилем для нашего приложения.
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:windowBackground">@drawable/splash_image_def</item>
<item name="android:windowNoTitle">true</item>
</style>
</resources>
В стиле указываем, что мы хотим использовать прозрачный статус бар.
Открываем Менеджер развертывания Menu->Project->Deployment Manager и добавляем наш файл стиля в проект только для андроид конфигураций:
Remote Path: "res\values\"
Remote Name: "styles.xml"
Теперь при запуске программы, андроид будет считать, что:
Приложение будет развернуто на весь экран
Статус бар будет прозрачного цвета.
3. Размещаем под статус баром TRectangle нужного цвета, в том TToolBar (если используете)
Я разместил вверху формы TRectangle, который залил требуемым цветом, в тон тул бару:
Высота статус бара у андроида равна 24.
Если вы делаете кроссплатформенный проект и для ios тоже, то по умолчанию скрываем этот прямоугольник и добавляем код по его отображению в конструктор формы только на андроиде
constructor TFormMain.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
{$IFDEF ANDROID}
SystemStatusBarBackground.Visible := True;
{$ENDIF}
end;
В принципе все готово.
Побочные эффекты
По скольку это решение сделано сбоку, то пара моментов, которые придется в вашей программе следить:
Нативные контролы распологаются по старому, полагая, что форма располагается под статус баром, а не под формой. Поэтому для нативных контролов таких, как TMapView, нужно корректировать позицию или отступы.
{$IFDEF ANDROID}
MapView.Margins.Top := -SystemStatusBarBackground.Height;
{$ENDIF}
Формы располагается так же и под нижними программными кнопками: Назад, домой и меню. Поэтому нужно так же иметь в виду, что расположенные снизу контролы, не будут кликабельны. Так как перекрываются нижней панелью с кнопками. Решение - это разместить TLayout под нижней панелью, чтобы сдвинуть ваши контролы к верху.