• 0
Юрий Гусач

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

Вопросы

Доброго дня!

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

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 ответов на этот вопрос

  • 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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу