Подтвердить что ты не робот

Как обернуть просмотр содержимого, а не использовать его?

Как я могу получить LinearLayout (или любую другую ViewGroup), чтобы предположить размер его дочерних элементов, а не предполагать размер фонового изображения?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/large_image300x300pix">

 <TextView android:id="@+id/TextView01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello world!"/>
</LinearLayout>

Линейный макет становится того же размера, что и фоновое изображение. Как я могу заставить свой линейный макет принять тот же размер, что и текст?

4b9b3361

Ответ 1

ОК, так что эта ветка немного старая, но у меня есть решение, которое кто-то может когда-нибудь найти полезным. Я думаю, что у Android проблемы с масштабированием больших изображений вниз, поэтому размер LinearLayout заканчивается тем, что он сталкивается с растровым рисунком, и ImageView приводит к увеличению размера родительского контейнера.

Если вы не используете относительный макет. Вы можете сделать ImageView относительно позиции LinearLayout, даже если ImageView находится за макетом в родительском. Мое решение выглядит примерно так:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
    android:src="@drawable/activation_popup"
    android:scaleType="fitXY"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_alignTop="@+id/activation_layout"
    android:layout_alignBottom="@id/activation_layout"
    android:layout_alignLeft="@id/activation_layout"
    android:layout_alignRight="@id/activation_layout"
    android:contentDescription="@string/act_code_label" />
<LinearLayout
    android:id="@id/activation_layout"
    android:clipToPadding="true"
    android:padding="25dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <!-- LinearLayout wraps a bunch of smallish views here -->
</LinearLayout>
</RelativeLayout>

Я пробовал это на вершине размеров дисплея и версий ОС, кажется, отлично работает. Обратите внимание, что дополнение в LinearLayout - это трюк, чтобы сделать пространство для тени на графике фонового изображения. LinearLayout не требует никакого относительного позиционирования, потому что предполагается, что верхний левый.

Ответ 2

Вы можете создать FrameLayout и разместить там ImageView и LinearLayout. Таким образом, вы сможете настроить макет фонового изображения.

Ответ 3

Это происходит из-за того, что представление Android вычисляет минимальный размер в зависимости от его размера фона.

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

Ответ 4

Если ваше изображение поддается преобразованию в масштабируемое изображение с 9 патчами, то это приведет к тому, что фон будет масштабироваться вокруг TextView.

Ответ 5

Я считаю, что лучшим решением здесь является установка android: clipToPadding = "true". То, что это делает, исключает заполнение основного макета и обертывает макет его дочерним элементам.