Разработка приложений для Android с использованием Delphi предполагает решение ряда задач, в том числе и работу с изменением ориентации экрана устройства. Это важно для обеспечения удобства использования приложения пользователями, так как оно должно корректно отображаться вне зависимости от того, в каком положении находится устройство — в портретном или ландшафтном.
Проблема
Разработчики, которые только начинают работу с Delphi и Android, часто сталкиваются с необходимостью обнаружения изменения ориентации экрана. Например, при переходе от портретного режима к ландшафтному и наоборот. Это необходимо для того, чтобы запускать определённый код при смене ориентации, например, для изменения размеров изображений, чтобы они занимали весь экран в ландшафтном режиме.
Решение
Для обнаружения изменения ориентации экрана в приложениях на Delphi для Android, следует использовать систему сообщений, предоставляемую компонентом TMessageManager. В вашей форме необходимо реализовать метод DoOrientationChanged, который будет обрабатывать сообщения о смене ориентации:
procedure DoOrientationChanged(const Sender: TObject; const M: TMessage);
begin
// Здесь код для обработки смены ориентации
end;
Далее, в методе FormCreate необходимо подписаться на сообщения, связанные со сменой ориентации:
Чтобы узнать текущую ориентацию экрана, можно использовать интерфейс IFMXScreenService:
var
screenService: IFMXScreenService;
begin
if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, screenService) then begin
case screenService.GetScreenOrientation of
TScreenOrientation.Portrait:
// Код для портретной ориентации
;
TScreenOrientation.Landscape:
// Код для ландшафтной ориентации
;
TScreenOrientation.InvertedPortrait:
// Код для инвертированной портретной ориентации
;
TScreenOrientation.InvertedLandscape:
// Код для инвертированной ландшафтной ориентации
;
end;
end;
end;
Пример использования
Допустим, у вас есть изображение размером 300x200 пикселей в портретном режиме, которое вы хотите, чтобы оно занимало всю ширину экрана в ландшафтном режиме. В методе DoOrientationChanged вы можете изменить свойства вашего компонента TImage, чтобы он соответствовал текущему размеру экрана:
procedure DoOrientationChanged(const Sender: TObject; const M: TMessage);
var
screenService: IFMXScreenService;
image: TImage;
begin
if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, screenService) then
begin
with image do
case screenService.GetScreenOrientation of
TScreenOrientation.Portrait:
Width := 300;
Height := 200;
TScreenOrientation.Landscape:
Width := Screen.Width;
Height := Screen.Height * Screen.PixelAspectRatio;
// Обработка других ориентаций по аналогии
end;
end;
end;
Не забудьте, что для доступа к интерфейсу IFMXScreenService и использования сообщений о смене ориентации, необходимо убедиться, что ваше приложение поддерживает соответствующие возможности на уровне операционной системы Android, возможно, потребуется запросить определённые разрешения.
Таким образом, разработчики могут обеспечить адаптивность интерфейса приложения и удобство его использования в различных режимах ориентации экрана.
Обнаружение изменения ориентации экрана в приложениях на Delphi для Android позволяет адаптировать интерфейс под портретный или ландшафтный режим, обеспечивая удобство использования.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS