Растянуть изображение в FrameLayout, чтобы соответствовать высоте соседнего элемента? - PullRequest
1 голос
/ 20 апреля 2011

Экземпляр ImageView в RelativeLayout с высотой, установленной в fill_parent, будет растягиваться, как и RelativeLayout.Например, если EditText в том же макете имеет высоту 10 строк, изображение растянется до 10 строк.

Как это поведение может быть воспроизведено в FrameLayout?Высота изображения, установленная в fill_parent, похоже, ведет себя так же, как wrap_content, независимо от высоты других элементов в FrameLayout.

Я бы предпочел обрабатывать это исключительно в XML.

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

Я нашел (возможно, взломанный) обходной путь - оборачивание FrameLayout в LinearLayout позволило мне установить FrameLayout на fill_parent, чтобы его дочерние элементы могли соответственно растягиваться.Итак:

<LinearLayout
orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <FrameLayout
        android:measureAllChildren="true"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <EditText
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
        <ImageView
            android:src="@drawable/image"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:scaleType="fitXY"
            android:layout_gravity="right|center_vertical" />
    </FrameLayout>
</LinearLayout>
<RelativeLayout ... >
    ... other stuff ...
</RelativeLayout>
</LinearLayout>

И ImageView растянется до высоты EditText.

2 голосов
/ 20 апреля 2011

FrameLayout имеет все свои дочерние виды, наложенные на одну и ту же область. В зависимости от ваших настроек вы можете изменить способ отображения видов. Согласно Android FrameLayout ,

Размер макета кадра размер его самого большого ребенка (плюс заполнение), видимый или нет (если Родительские разрешения FrameLayout).

Также из Объекты общей планировки

FrameLayout - самый простой тип макет объекта. Это в основном пустой место на экране, которое вы можете позже заполните одним объектом - для Например, изображение, которое вы будете менять и вне. Все дочерние элементы FrameLayout прикреплены к верхнему левому угол экрана; ты не можешь указать другое место для детский взгляд. Последующие дочерние представления будет просто нарисован поверх предыдущего те, частично или полностью затемняющие их (если не новый объект прозрачный).

В вашем примере изображение в FrameLayout не будет растянуто до размеров его самого большого брата, независимо от использования fill_parent или wrap_content.

...