Фоновое изображение для wrap_content
Я создал собственное фоновое изображение и хотел использовать его в качестве фона для макета с высотой wrap_content. Однако общая высота содержимого внутри этого макета намного меньше высоты фонового изображения.
Когда я установил его как фон в XML с помощью android: background = "@drawable/image" , я заметил, что он отображает всю высоту изображения, хотя высота фактического содержимого намного короче.
Есть ли способ остановить это?
Спасибо.
Ответы
Ответ 1
У меня была аналогичная проблема, и я использовал 9patch. Полное 9 патч-изображения показывалось в качестве фона, хотя содержимое, к которому оно было прикреплено, было не таким большим (использовало wrap_content). Я не уверен, почему Android решил показать полное изображение, а не масштабировать фон, чтобы он соответствовал содержимому.
Однако я исправил проблему, уменьшив фоновое изображение. Под этим я подразумеваю сохранение углов, но уменьшение вертикальных и горизонтальных участков. См. Прикрепленные изображения фрейма, которые у меня были до этого, и результат усилий по изменению размера.
![alt text]()
![alt text]()
Ответ 2
Вы можете преобразовать фоновое изображение в 9-patch drawable или использовать растровое изображение XML, чтобы изменить поведение вашего изображения, когда оно больше контейнера. Подробнее см. эту страницу.
Ответ 3
Я также столкнулся с этой проблемой. Если установить фоновый ресурс слишком мал, у вас могут возникнуть проблемы с соотношением сторон. Решение, которое я нашел, состояло в том, чтобы разделить фоновое изображение на три части: верхнюю, среднюю и нижнюю. Каждое из этих изображений представляет собой фон из трех разных макетов/изображений. Средняя часть - это та, которая содержит свойство "wrap_content":
Top:
![bg_top]()
Средний: ![bg_middle]()
Внизу: ![enter image description here]()
По мере увеличения размера содержимого границы будут оставаться неизменными, а средний будет увеличиваться (как и весь "ящик" ). Конечно, это решение для случая, когда раздел вашего фонового изображения имеет смысл.