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

Размеры формы на разных устройствах


Юрий Гусач

Вопрос

Доброго дня!

Проясните пожалуйста ситуацию: при запуске программы  под Андроидом на различных устройствах я получаю размеры формы, которые вроде всегда в разы меньше чем максимальное разрешение экрана конкретного устройства. Я пробовал планшеты и разные смартфоны. Написал тестовую прогу, которая выводит СlientScreen и  ClientWidth формы, на которой ничего больше нет. Например для крайне бюджетного смартфона Fly FS-549 получилось 497 х 320, а по паспорту 854x480. Разрешение и так хреновое, а Delphi его еще сильнее уменьшает. -       Почему это происходит и можно ли как то это обойти?

 

 

Изменено пользователем Юрий Гусач
Ссылка на комментарий

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

  • 0

Это происходит из-за масштабирования.

В вашем случае, коэффициент масштабирования равен 1.5
По ширине если перемножить 320 на 1.5 как раз получится паспортные 480.
По высоте должно тоже получиться, но у вас скорее всего форма не на полный экран, поэтому сжирается честь места сверху для статусбара и снизу для кнопок назад, домой, и список приложений.
Мне доводилось работать с устройствами на которых были такие коэффициенты
1.5 - древнющий беспонтовый ACER, разрешение экрана не помню
2.0 - ветеран Nexus 4, разрешение 1280х720
3.0 - Huawei p8 lite 2007, разрешение 1920х1080

Со всеми этими устройствами дельфи работает без проблем, масштабирование не приносит сколь-нибудь значимых проблем.

45 минут назад, Юрий Гусач сказал:

можно ли как то это обойти?

Расскажите, с какой целью?

Ссылка на комментарий
  • 0

Delphi то работает без проблем. Но внешний  вид приложения хотелось бы получить немного получше. В принципе понятно, что применяется масштабирование. Не полностью понятно когда, какое, и почему?

Например на  Samsung S3 из 1280 x 720  получаем 640 x 360. то есть коэффициент 2. Почему 2, а не 3 или 1.5  ?   

Ссылка на комментарий
  • 0

Так внешний вид абсолютно нормальный получается. Нужно лишь подготовить ресурсы для каждого коэффициента, но это везде так.

Я сейчас не на рабочем месте, могу завтра показать как это выглядит на разных устройствах.

Почему два а не три - роли не играет. Этот коэффициент можно получить, если необходимо.

Ссылка на комментарий
  • 0
15 часов назад, Barbanel сказал:

Так внешний вид абсолютно нормальный получается. Нужно лишь подготовить ресурсы для каждого коэффициента, но это везде так.

Я сейчас не на рабочем месте, могу завтра показать как это выглядит на разных устройствах.

Почему два а не три - роли не играет. Этот коэффициент можно получить, если необходимо.

Спасибо!

Интересно, как получить коэффициент масштабирования во время работы программы(у пользователя может быть любое устройство). 

И все-таки было бы очень интересно узнать, что именно добиваются разработчики Fire monkey под Андроидом урезанием разрешения экрана.

По видимому, какой то смысл в этом есть, но какой именно? 

  

   

Ссылка на комментарий
  • 0
23 минуты назад, Юрий Гусач сказал:

Интересно, как получить коэффициент масштабирования во время работы программы(у пользователя может быть любое устройство). 

var     ScreenService: IFMXScreenService;
        scale: single;

begin
    if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then
    scale:=ScreenService.GetScreenScale;
end;

 

23 минуты назад, Юрий Гусач сказал:

И все-таки было бы очень интересно узнать, что именно добиваются разработчики Fire monkey под Андроидом урезанием разрешения экрана.

По видимому, какой то смысл в этом есть, но какой именно? 

   

Эту фишку придумали не разработчики FireMonkey. Коэффициент масштаба экрана используется и в iOS, и в Android. Введен он для более удобного перевода ПО под новые экраны.

Смысл в том, что оперируя тем же логическим размером экрана, ПО автоматически отрисовывает изображение на другом физическом разрешении.

Ссылка на комментарий
  • 0
31 минуту назад, Юрий Гусач сказал:

Интересно, как получить коэффициент масштабирования во время работы программы(у пользователя может быть любое устройство). 

Этот код был на этом форуме. Смотрите переменную sScale

  if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then
  begin
    sScreenSize := ScreenService.GetScreenSize.Round;
    sScale := ScreenService.GetScreenScale;
    DeviceInfo.diScreenLogic := FloatS(sScreenSize.x) + ' x ' + FloatS(sScreenSize.y);
    DeviceInfo.diScreenPhis := FloatS(sScreenSize.x * sScale) + ' x ' + FloatS(sScreenSize.y * sScale);
    DeviceInfo.diScreenWidth := sScreenSize.x;
    DeviceInfo.diScreenHeight := sScreenSize.y;
    DeviceInfo.diScale := sScale;
  end;

 

31 минуту назад, Юрий Гусач сказал:

И все-таки было бы очень интересно узнать, что именно добиваются разработчики Fire monkey под Андроидом урезанием разрешения экрана.

Одно из наших приложений, в архиве чуть побольше фоточек чтобы вы убедились что все действительно хорошо. Ну, заодно и критику от коллег смогу услышать))
PS. не обращайте внимания на язык, так задумано)
приложение делается для школ Германии.

SMALL_1.thumb.jpg.3ab572a648ce9abe8234b87d2cf892c0.jpg

Screens.zip

Изменено пользователем Barbanel
грамматика
Ссылка на комментарий
  • 0
2 минуты назад, Alex7wrt сказал:

Смысл в том, что оперируя тем же логическим размером экрана, ПО автоматически отрисовывает изображение на другом физическом разрешении.

Во, шикарное пояснение!!!
Я все ломал голову, как это выразить)

Ссылка на комментарий
  • 0
7 минут назад, Barbanel сказал:

Этот код был на этом форуме. Смотрите переменную sScale

Ага, спасибо большое ! Нашел в форуме. Буду разбираться дальше  ?

Ссылка на комментарий

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

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

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

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

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

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

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

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

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