Можно ли разместить один вид поверх другого в Android?

Можем ли мы разместить маленькое представление поверх другого большого? Например, у меня есть VideoView, который воспроизводит файл в фоновом режиме. Над этим, где-то в середине/углу, я хочу разместить еще один ImageView.

Но в Linear/Relative Layout представления могут размещаться только одно за другим или относительно друг друга, и AbsoluteLayout не рекомендуется. Итак, что мне делать?


person kiki    schedule 29.09.2010    source источник
comment
RelativeLayout будет работать, но вы можете использовать FrameLayout.   -  person bhups    schedule 29.09.2010


Ответы (4)


FrameLayouts позволяет размещать каждый вид поверх предыдущего. Это также может быть достигнуто с помощью RelativeLayout.

person skorulis    schedule 29.09.2010
comment
Не могли бы вы привести пример того или иного случая? Я не в состоянии обдумать это. - person kiki; 29.09.2010
comment
@kiki - Google Android FrameLayout, и вы найдете множество примеров. - person McStretch; 29.09.2010
comment
stackoverflow.com/questions/6690530/ - person nograde; 12.04.2012
comment
Используйте FrameLayout, поскольку он позволяет вам перекрывать представления. - person Gaurav Agrawal; 05.03.2013

FrameLayout является самым простым ViewGroup и размещает Views в том порядке, в котором они определены в макете XML (или добавлены программно); первый будет ниже, а последний будет сверху.

Вот пример, где два Views расположены друг над другом и смещены друг к другу, чтобы лучше проиллюстрировать суть:

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

Вот реальный макет XML с двумя перекрывающимися полями TextView. Смещение двух блоков выполняется с помощью android:layout_gravity, а android:gravity используется для центрирования самого текста внутри каждого блока.

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="100dp"
    android:layout_height="100dp">

    <TextView
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_gravity="top|left"
        android:background="@android:color/holo_blue_light"
        android:gravity="center"
        android:text="First is below"/>

    <TextView
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_gravity="bottom|right"
        android:background="@android:color/holo_green_light"
        android:gravity="center"
        android:text=" Last is on top"/>

</FrameLayout>
person Stephan Henningsen    schedule 15.09.2016
comment
Именно то, что мне было нужно. - person viper; 03.09.2019
comment
Этот ответ - чистое золото! - person KennyAli; 05.02.2021

На всякий случай, если вы хотите разместить представление поверх ButtonView, используйте это; android:elevation="7dp" для представления, которое нужно разместить поверх кнопки.

person Roshan Halwai    schedule 28.03.2018
comment
Спасибо. Это сработало, но у меня также сработало с 1 дп. - person Chivorn; 04.09.2018
comment
Спасибо, я застрял, чтобы отправить кнопку обратно в течение нескольких часов. Вы спасли мой день - person Zulqarnain; 27.07.2020

Вы также можете сделать это с помощью ConstraintLayout — нового макета, представленного Google.

ConstraintLayout позволяет создавать большие и сложные макеты с плоской иерархией представлений (без вложенных групп представлений).

 <?xml version="1.0" encoding="utf-8"?>
  <android.support.constraint.ConstraintLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/container"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:layout_weight="4"
  tools:context="com.edalat.example.MainActivity">
  <VideoView
    android:id="@+id/videoView"
    android:layout_width="283dp"
    android:layout_height="349dp"
    app:layout_constraintBottom_toBottomOf="parent"
    android:layout_marginBottom="24dp"
    app:layout_constraintTop_toTopOf="parent"
    android:layout_marginTop="24dp"
    android:layout_marginRight="24dp"
    app:layout_constraintRight_toRightOf="parent"
    android:layout_marginLeft="24dp"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintHorizontal_bias="0.509"/>
  <ImageView
     android:id="@+id/imageView"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     app:srcCompat="@mipmap/ic_launcher"
     app:layout_constraintTop_toTopOf="parent"
     android:layout_marginTop="24dp"
     app:layout_constraintBottom_toBottomOf="parent"
     android:layout_marginBottom="24dp"
     android:layout_marginLeft="24dp"
     app:layout_constraintLeft_toLeftOf="parent"
     android:layout_marginRight="24dp"
     app:layout_constraintRight_toRightOf="parent"/>
   </android.support.constraint.ConstraintLayout>
person Edalat Feizi    schedule 26.04.2017
comment
В ConstraintLayout представления размещаются с учетом порядка. Например, <ConstraintLayout> <View1/> <View2/> </ConstraintLayout> View2 будет размещен над View1 (если они оба находятся в одном месте на экране). - person Martin Olariaga; 21.07.2021