Перейти к содержанию
  • Регистрация
  • 0
Alex7wrt

Размер экрана 18/9

Вопрос

Добрый день

Есть приложение, которое работает в полноэкранном режиме.

Первый раз тестил его на экране с соотношением сторон 18:9 (Xiaomi Redmi 5). 

По умолчанию приложение открывается с черными полосами сверху/снизу либо слева/справа (смотря какая ориентация)

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

При активации этой опции для моего приложения, размер экрана все равно определяется неверно (должно быть 1440*720, а получаю 1344*720), и из-за этого при отрисовке элементов интерфейса вблизи границ экрана получаю не то, что должно быть. 

Например,  есть элемент шириной W, тогда при отрисовке элемента в точке с горизонтальным значением Point.X:=20 и в точке с Point.X:=Screen.Width - W - 20, получаю разные расстояния от элемента до левой и правой стороны экрана соответственно (альбомная ориентация).

При этом для "обычных" экранов все работает отлично.Подозреваю, что это как-то связано с наэкранными кнопками меню, но не знаю, это особенность Xiaomi или вообще всех таких современных экранов.

Кто в теме, подскажите.

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


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

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

  • 0

Да вот с этим проблема

Само приложение представляет собой клиент, который работает только в связке с серверной частью на компе, поэтому скинуть не получится

А сам Redmi 5 мне на данный момент не доступен, поэтому сомневаюсь, что сделаю адекватный пример. Вчера на нем тестировал. Если бы был при мне, может быстрее нашел бы решение.

Но Redmi 3S у меня есть, на нем как и на абсолютно всех других телефонах с соотношением 16 на 9 и меньше, и с аппаратными кнопками, все работает норм.

Думаю сама концепция тестового примера сводится к следующему

В свойствах формы FullScreen = true; BorderStyle = bsNone;

Помещаем 2 кнопки, и для их горизонтальных координат указываем то, что я писал в посте выше

X:=20; 

X:=Screen.Width - W - 20;

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


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

Все-таки сделал пример. Прикрепил архив с проектом

app.zip

Вот весь код:

procedure TForm1.FormCreate(Sender: TObject);
var i: byte;
begin
    Container:=TRectangle.Create(Form1);
    with Container do begin
        Parent:=Form1;
        Align:=TAlignLayout.Contents;
        Stroke.Kind:=TBrushKind.None;
        Fill.Color:=TAlphaColors.Black;
    end;

    for i:= 1 to 4 do
        with TRectangle.Create(Container) do begin
            Parent:=Container;
            Stroke.Kind:=TBrushKind.None;
            Fill.Color:=TAlphaColors.White;
        end;
end;

procedure TForm1.FormResize(Sender: TObject);
var i: byte;
begin
    w:=screen.Width; h:=screen.Height;
    for i:= 1 to 4 do begin
        with TRectangle(Container.Children[i-1]) do begin
            Height:=min(w,h)*(0.35+0.1*byte(w>h));
            Width:=Height*1.33;
            if h>w then begin
                Position.X:=(w - 2*Width-0.1*width)*0.5 + ((i+1) mod 2)*(Width+0.1*width);
                Position.Y:=(h - 2*Height-0.6*width)*0.5 + (i div 3)*(Height+0.1*width);
            end
            else begin
                Position.X:=(w - Width-0.03*h)*((i+1) mod 2)+0.015*h;
                Position.Y:=(h - Height-0.03*h)*max((round(i*0.5)-1),0)+0.015*h;
            end;
        end;
    end;
end;

В альбомной ориентации на "обычных" устройствах интерфейс имеет следующий вид:

Screenshot_2018-07-02-21-42-18-242_com.embarcadero.Project1.thumb.png.0b1512bcc5306aef873815e73125aa24.png

Но на Redmi 5 рамка справа намного шире, из-за чего картинка теряет симметрию. Скорее всего это из-за некорректного определения размера экрана

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


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

в силу отсутствия рамок на андроиде нет смысла Borderstyle выставлять. сбросил в sizable

на Xiaomi Redmi Note 3 pro норм. на 5А - тоже. до 5-ки пока не добрался

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
2 часа назад, krapotkin сказал:

в силу отсутствия рамок на андроиде нет смысла Borderstyle выставлять. сбросил в sizable

на Xiaomi Redmi Note 3 pro норм. на 5А - тоже. до 5-ки пока не добрался

Этот параметр остался из единого кода с iOS, где он скрывает статусбар.

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
9 часов назад, krapotkin сказал:

на Xiaomi Redmi Note 3 pro норм. на 5А - тоже. до 5-ки пока не добрался

На этих телефонах экран 16/9, а не 18/9. Как раз в Redmi 5 и есть мой вопрос. Если получится посмотреть, буду очень благодарен

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


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

короче, сорян, наврал

оказывается у жены Note 4,

на нем тоже все зашибись

у старшего сына 5, но до него вряд ли быстро доберусь)

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


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

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

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

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

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

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

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

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

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


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

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

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