Что делает FrameLayout?

97

Я новичок в программировании. Я использовал Graphical Layout, тогда, когда я читал XML-файл, я увидел FrameLayout. Потом поискал, но ничего полезного не нашел. Что такое FrameLayout и для чего он нужен?

Амин Гасеми
источник
1
Вы здесь прошли? developer.android.com/reference/android/widget/FrameLayout.html
Ed_Fernando 05
12
Да, я был там, но не нашел ничего понятного.
Амин Гасеми

Ответы:

196

Вы используете FrameLayout для наложения дочерних представлений друг на друга, при этом самый последний дочерний элемент находится поверх стека. В приведенном ниже примере TextView является самым последним, поэтому он автоматически помещается поверх ImageView.

Например:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/backgroundImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="centerCrop"
        android:src="@drawable/bitmapie" />

    <TextView
        android:id="@+id/descTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginTop="70dp"
        android:background="@android:color/holo_blue_light"
        android:padding="10dp"
        android:text="TextView placed at the top of the Imageview"
        android:textColor="@android:color/white"
        android:textSize="22sp" />

</FrameLayout>

Выход:

введите описание изображения здесь

Оджонугва Джуд Очалифу
источник
40
Мне нравится видеть код с их выводом. Большое спасибо! Проголосовали. Кроме того, мне нравится дизайн, который вы там сделали. Просто, но очень красиво!
Tarik
3
Очень простое, мощное, но легкое объяснение - спасибо @ojonugwaochalifu!
Coder Absolute
2
Очень хорошее объяснение. Я тоже прочитал «Описание разработчика» на официальной странице и подумал, что фраза «сверху» означает больше в верхней части экрана. Ваше объяснение заставило меня щелкнуть по трехмерной природе «сверху», и теперь я понял. Большое спасибо :)
Slartibartfast
1
@ojonugwaochalifu: спасибо за объяснение. У меня есть небольшой запрос, то, что мы здесь сделали, мы также можем сделать с помощью относительной компоновки. Тогда почему мы используем макет фрейма?
akashPatra
3
Да, они делают почти то же самое, но помните, что при проектировании представлений рекомендуется использовать как можно меньше вложений в макеты. Когда вы используете FrameLayout, вложение, необходимое для размещения представлений друг на друге, меньше, чем при использовании RelativeLayout.
Ojonugwa Jude Ochalifu
75

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

  1. Добавить единую иерархию представлений в FrameLayout
  2. Добавьте несколько дочерних элементов и используйте их android:layout_gravityдля навигации

введите описание изображения здесь

Еще популярные подходы к использованию FrameLayout:

  • как Fragmentконтейнер
  • как предок вашего обычая ViewGroup
yoAlex5
источник
23

Вы можете рассматривать это слово frameкак обычную фоторамку. Что вы делаете с этой рамкой? вы можете размещать фотографии в этой рамке одна за другой. Как и в случае, FrameLayoutмы можем размещать представления (любой макет или виджет, например, кнопку, текст, изображение и т. Д.) Поверх других, поскольку @ojonugwa показывает вам текстовое представление сверху изображения.

Асиф Муштак
источник
Хорошо, я думал об этом как о iframeвеб-разработке. Спасибо за простейшее объяснение.
Tarik
19

Вы уверены, что гуглили?

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

Однако вы можете добавить несколько дочерних элементов в FrameLayout и управлять их положением в FrameLayout, назначив каждому дочернему элементу гравитацию с помощью атрибута android: layout_gravity.

Секрет FrameLayout в том, как он размещает своих дочерних элементов. Хотя обычно он предназначен для размещения одного элемента, он с радостью складывает другие элементы друг на друга. Таким образом, FrameLayout - это, по сути, способ управления Z-порядком представлений на экране.

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

FrameLayout предназначен для отображения одного элемента за раз. Вы можете иметь несколько элементов внутри FrameLayout, но каждый элемент будет располагаться в соответствии с левым верхним уголком экрана. Элементы, которые перекрывают друг друга, будут отображаться внахлест. Я создал простой XML-макет с использованием FrameLayout, который показывает, как это работает.

Metehan
источник
8
да я их видел. но я не мог понять, что они говорят.
Амин Гасеми
Вы можете думать об этом как о рамке для картины. В основном то, что вы вводите, будет выровнено слева от экрана. learn-android-easily.com/2013/05/frame-layout-in-androis.html
Metehan
Поэтому вы должны использовать его для отображения одного элемента в большинстве случаев.
Metehan 05
4

В основном он помещает одно представление поверх другого, например:

Увеличение текста на изображении

  <FrameLayout>

<ImageView>
<Textview>

  </FrameLayout>
КОТИОС
источник
1
nope linearlayout размещает один за другим ... фрейм размещается поверх него ... скажем, для senario, например, есть сетка на изображениях и есть кнопка отмены поверх этого изображения ... там мы используем макет фрейма
KOTIOS