Важно (9.07.22)

Если картинки в постах не отображаются, зайдите в блог через прокси. РКН заблокировал поддомены blogger.com на которые загружались картинки.

суббота, 4 января 2014 г.

Определяем разрешение и ориентацию экрана/формы

Для решения задачи с определением разрешения воспользуемся JNI (Android API: http://developer.android.com/reference/android/util/DisplayMetrics.html).
На самом деле объяснять тут не чего особо, поэтому я просто приведу код проекта. Не забываем подключить в uses «FMX.Helpers.Android, Androidapi.JNI.Util;». Код, приведённый ниже расписан, чтобы всё было понятно.
Кстати, пример определения ориентации экрана и отображения определённой формы есть в демо проектах Delphi XE5.

Upd (21.04.14). Проверено на Delphi XE6

Код проекта:

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Helpers.Android, Androidapi.JNI.Util;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Disp: JDisplayMetrics;
  NativeClientHeight, NativeClientWidth: Single; // Для формы

implementation

{$R *.fmx}


procedure TForm1.FormResize(Sender: TObject);
begin
  // Общая строчка для экрана и формы
  Disp := GetJDisplayMetrics;

  // Экран
  Label2.Text := 'Width: ' + Disp.widthPixels.ToString();
  Label3.Text := 'Height: ' + Disp.heightPixels.ToString();
  //**********

  // Форма
  NativeClientHeight := ClientHeight * Disp.density;
  NativeClientWidth := ClientWidth * Disp.density;
  Label5.Text := 'Width: ' + FloatToStr(NativeClientWidth);
  Label6.Text := 'Height: ' + FloatToStr(NativeClientHeight);
  //**********

  // Orientation
  if (Height > Width) then
    Label7.Text := 'Orientation: Portrait'
  else if (Height < Width) then
    Label7.Text := 'Orientation: Landscape';
end;

end.


Исходный код проекта: Скачать с Google Drive