• 0
Alex7wrt

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

Вопросы

Добрый день

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

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

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

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

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

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

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

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

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


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

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

  • 0

выложите тестовый проект, я могу запустить на xiaomi 3,5,5A

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


Ссылка на сообщение
Поделиться на другие сайты
  • 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, но до него вряд ли быстро доберусь)

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


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

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

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

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

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

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

Войти

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

Войти

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

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