Ответ 1
С помощью инструмента draw9patch
вы можете определить:
- вертикальное растяжение: черные пиксели с левой стороны
- горизонтальная растяжка: черные пиксели на верхней стороне
- вертикальный контент: черные пиксели с правой стороны
- горизонтальный контент: черные пиксели внизу
Обратите внимание, что растягивающие пиксели не должны быть смежными, поэтому вы можете исключить какой-либо определенный срез из растяжения (посмотрите на стрелку всплывающего окна выше). В то же время вы можете сделать разумную идею о том, где будет размещен ваш контент, просто взглянув на предварительный просмотр справа, с фиолетовыми областями. Как вы можете предположить, таким образом вам не нужно указывать какие-либо дополнения в вашем макете: в представлении будут учтены эти значения, используя параметр 9patch, который вы устанавливаете в качестве фона.
Области без растяжения масштабируются с плотностью пикселей. Таким образом, если вы установите 9patch выше как ресурс mdpi
, верхний левый срез отображается в области размером 50x40 пикселей @mdpi и в области пикселей размером 100x80 пикселей @xhdpi. Самые левые области растяжения вместо этого располагают ширину в соответствии с разрешением dpi, а высота - по содержанию. Другие растягивающие срезы работают аналогичным образом.
В обоих случаях обращение с 9patch с низким разрешением может привести к уродливым артефактам пикселизации. Возможное решение - предоставить другой 9patch для каждого поддерживаемого dpi или определить только более высокие (xhdpi) и позволить Android соответствующим образом масштабировать их.
Границы содержимого обрабатываются как dp
, поэтому они масштабируются в соответствии с плотностью пикселей. Например: левое заполнение, определенное в исходном 9patch как 40px @mdpi, будет переведено в 80px @xhdpi, поэтому контент никогда не выйдет из заданных границ. Примечание. Вы можете даже переопределить границы содержимого, указанные в 9patch, с помощью свойств padding*
в вашем макете.