Страницы

Поиск по вопросам

вторник, 19 марта 2019 г.

Как растягивать background на Андроиде?

Рассмотрим то, что мне нужно, на примере этого котика:

Допустим, в моём приложении этот котик представляет собой атрибут background в корневом layout в файле main_activity.xml
Во-первых, если экран устройства меньше, чем котик, то котик должен сжиматься, но никак не обрезаться. Причём так, чтоб на экране не оставалось пустого места. То есть:

Так-то оно и по умолчанию происходит, но есть одно больше во-вторых: все view-элементы на экране тоже должны сжиматься и оставаться на той части котика, на которой они были изначально, то есть:

В общем, это всё, что мне нужно, но так должно быть на каждом устройстве, учитывая планшеты.
Я много читал в интернете про все эти экранные дела, но там нету целостной картины. А мне нужна полная последовательность действий
какие нужно создавать layout'ы? какие к ним нужны подпапки drawable? какого разрешения делать котиков? писать ли что-то в AndroidManifest? и что-то ещё, чего я не знаю..?


Ответ

Требуемого вами поведения можно в основном добиться, используя следующую разметку:

Котик заполняет собой все место - и в альбомной и в портретной ориентации. Проверено на телефоне и планшете. Надпись распологается на одном и том же месте котика.
Если искать несоответстие, то это не совсем пропорциональное изменение размера текста (особенно заметно по ширине). Тут конечно тоже можно было бы повозиться и пересчитать размер шрифта, исходя из числа пикселей экрана. И назначить этот размер шрифта программно. Но мне кажется, не стоит так напрягаться, так как результат вполне сносный. Если лезть в такие дебри, то потом возникнут проблемы типа: а что если текст не поместится в одну строку? и т.д.
По поводу разных плотностей. Картинка благополучно растянулась под размер экрана и на телефоне и на планшете. Оба устройства с нормальной плотностью. Для высокой плотности неплохо было бы предоставить картинку побольше. Для низкой плотности - поменьше, чтобы занимала меньше места, и не было артефактов изображения при обработке слишком детализированного изображения для экрана, где мало пикселей, хотя, может, это и лишнее.

Комментариев нет:

Отправить комментарий