web-dev-qa-db-fra.com

Est-il possible de placer une vue sur une autre dans Android?

Pouvons-nous placer une petite vue sur une autre grande vue? Par exemple, j'ai une VideoView qui lit un fichier en arrière-plan. Par-dessus, quelque part au milieu/coin, je veux placer une autre ImageView.

Mais dans la disposition linéaire/relative, les vues ne peuvent être placées que les unes après les autres ou les unes par rapport aux autres, et AbsoluteLayout est déconseillé. Alors qu'est-ce que je fais?

27
kiki

FrameLayouts vous permet d'empiler chaque vue au-dessus de celle ci-dessous. Ceci peut également être réalisé avec un RelativeLayout.

15
skorulis

FrameLayout est le plus simple ViewGroup et empile le Views dans l'ordre dans lequel il est défini dans la disposition XML (ou ajouté par programmation); le premier sera plus bas et le dernier sera au dessus.

Voici un exemple où deux Views sont empilés et décalés pour mieux illustrer le point:

enter image description here

Voici le XML de présentation réel avec les deux cases TextView qui se chevauchent. Le décalage des deux cases se fait à l'aide de Android:layout_gravity tandis que Android:gravity est utilisé pour centrer le texte lui-même dans chaque case.

<?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>
28
Stephan Henningsen

Juste au cas où si vous souhaitez placer une vue au-dessus d'une ButtonView, utilisez-la; Android:elevation="7dp" pour la vue qui doit être placée en haut du bouton.

10
Roshan Halwai
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:padding="@dimen/dp_20"
    Android:background="@color/yellow"
    >
        <VideoView
            Android:id="@+id/videoview"
            Android:layout_width="wrap_content"
            Android:layout_centerInParent="true"
            Android:layout_height="300dp"
            Android:contentDescription="@string/app_name"
             />

        <ImageView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:src="@drawable/camera"
            Android:layout_margin="30dp"
            Android:layout_alignParentEnd="true"
            Android:layout_centerVertical="true"
            Android:id="@+id/imageView" />

</RelativeLayout>
2
Kushal Ramola

Vous pouvez également le faire en utilisant ConstraintLayout une nouvelle mise en page introduite par google.

ConstraintLayout vous permet de créer des présentations volumineuses et complexes avec une hiérarchie de vues plates (pas de groupes de vues imbriquées).

 <?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>
2
Edalat Feizi