Android выравнивает ImageViews в разных разрешениях / плотностях - PullRequest
1 голос
/ 21 февраля 2012

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

Проблема в том, что, например, экран Game Over имеет фон, затем должно быть изображение с надписью «Вы выиграли» или «Вы проиграли» над фоном с определенным смещением от верхнего левого угла. Если я спроектирую интерфейс для телефонов 480x800 и укажу смещение в пикселях, все в порядке. Но если я разверну его в телефоне 320x480, он, конечно, не подойдет, потому что смещение пикселей теперь другое, а фон масштабируется.

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

вот набросок того, что я хотел бы сделать. Все и так должно выглядеть на телефонах от 240х320 до 540х960. Можно ли как-то сделать это в одном файле макета XML или мне приходится вручную смещать код для каждого разрешения, которое приходит мне в голову?

Основная проблема заключается в том, что на картинке красная рамка вокруг «Вы выигрываете» - это место, где она помещается на оранжевом фоне, потому что именно так устроена графика. И когда приложение запускается на телефоне с меньшим разрешением, я точно не знаю, как выровнять изображение «ты выиграл» на оранжевом. enter image description here.

Ответы [ 3 ]

1 голос
/ 21 февраля 2012

@ Axarydax, если вы хотите, чтобы ваше приложение поддерживало экран разных размеров, вам придется их проектировать.У меня была та же проблема: помещал изображения в drawable-hdpi для устройства высокой плотности, в drawable-ldpi для устройства низкой плотности и в drawable-mdpi для устройства средней плотности, а затем

. Что я сделал, я создал три различных макетапапки, например, для макета 320x480

для экрана размером 240x320

layout-port-320x240

для экрана размера 480x800

layout-port-480x800

и создал соответствующий макет с тем же именем. После того, как вы выполнили компиляцию для всех, Android автоматически выберет соответствующий макет, для которого я создал эмуляторы разрешения, а затем скорректировал макеты в соответствии с моим требованием

1 голос
/ 03 мая 2014

Я управлял мульти-разрешением, получая смещение размера экрана.

DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        height = displaymetrics.heightPixels;
        width = displaymetrics.widthPixels;

        getDensityName(displaymetrics.density);

        int dens=displaymetrics.densityDpi;
        double wi=(double)width;
        double hi=(double)height;
        double x = Math.pow(wi,2);
        double y = Math.pow(hi,2);
        double screenInches = Math.sqrt(x+y)/(double)dens;

        if(screenInches<3.7)
        {
            offset = 0.7f;  
        }
        else if(screenInches<4.2)
        {
            offset = 1.1f;
        }
        else if(screenInches<5.0)
        {
            offset = 1.5f;
        }
        else if(screenInches<6.0)
        {
            offset = 1.7f;
        }
        else
        {
            offset = 2f;
        }

Я надеюсь, что это может помочь другим. Спасибо!

1 голос
/ 21 февраля 2012

создавайте изображения разного размера из предоставленной PSD для разной разметки экрана и создавайте разный XML-файл разметки для разного размера экрана, в другом файле разметки вы можете указать ссылки на изображения, подходящие для разметки.

Для лучшеговы должны идти сюда , а также это

...