Перейти к содержанию
Fire Monkey от А до Я
  • 0

Принудительная ориентация экрана


Pax Beach

Вопрос

Я использую принудительную ориентацию экрана на Android устройстве.

Что это означает?

Когда открывается приложение, экран переворачивается в то положение, которое я устанавливаю по умолчанию, или которое было установлено в настройках приложения (состояние читается при запуске приложения).

Приведу пример кода, как я его написал. Здесь что-то лишнее, что-то может стоит доработать.

Есть две проблемы в примере:

1. Чтобы изменить ориентацию экрана, приходится закрывать (уничтожать) приложение, а потом открывать заново.

2. Когда стоит режим ландшафт, то срабатывает автоматический переворот экрана по сенсору, когда поворачиваешь экран на 180 градусов. А когда стоит режим портрет, автоматически экран не переворачивается.

 

В настройках проекта так:

2016-12-20_23-52-09.png

 

В Object inspector для главной формы так:

2016-12-20_23-52-53.png

 

В модуле проекта вот так:

begin
  Application.Initialize;
  TAndroidHelper.Activity.getWindow.addFlags
    (TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON);

  Application.FormFactor.Orientations := [TFormOrientation.Portrait,
    TFormOrientation.InvertedPortrait, TFormOrientation.Landscape,
    TFormOrientation.InvertedLandscape];
  Application.CreateForm(TDM, DM);
  Application.CreateForm(TfmMain, fmMain);
  VKAutoShowMode := TVKAutoShowMode.Always;
  Application.Run;

end.

 

В модуле главной формы:

procedure TfmMain.FormShow(Sender: TObject);
begin
  if DM.setOrientation(TAndroidHelper.Activity) then
    Invalidate;
end;

 

В дата-модуле вот так:

function TDM.setOrientation(Activity: JActivity): boolean;
var
  orient: Integer;
begin
  result := False;
  if DM.GetSettingsBoolean('IsOrientationLandshaft', true) then
    orient := TJActivityInfo.JavaClass.SCREEN_ORIENTATION_SENSOR_LANDSCAPE
  else
    orient := TJActivityInfo.JavaClass.SCREEN_ORIENTATION_SENSOR_PORTRAIT;

  try
    if Activity.getRequestedOrientation <> orient then
    begin
      Activity.setRequestedOrientation(orient);
      result := true;
    end;
  except
    result := False;
  end;
end;

 

 

Изменено пользователем Pax Beach
Ссылка на комментарий

Рекомендуемые сообщения

Ответов пока нет

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...