Est-il possible de placer un point de vue sur une autre dans Android?
-
26-09-2019 - |
Question
Peut-on placer une petite vue sur une autre grande vue? Par exemple, j'ai un VideoView qui joue un fichier en arrière-plan. Au cours de cela, quelque part dans le coin du milieu de /, je veux placer une autre ImageView.
Mais linéaire / Mise en page relative, vues peut être placé que l'un après l'autre ou par rapport à l'autre, et AbsoluteLayout est déconseillé. Alors, que dois-je faire?
La solution
FrameLayouts
vous laissez pile chaque vue sur le dessus de celui ci-dessous. Cela peut aussi être réalisé avec un RelativeLayout
.
Autres conseils
Le FrameLayout
est le ViewGroup
simple et empile les Views
dans l'ordre dans lequel ils sont définis en XML de mise en page (ou ajoutés par programme); la première sera plus faible, et le dernier sera sur le dessus.
Voici un exemple où deux Views
sont empilés et offset pour mieux illustrer le point:
Voici le code XML de mise en page réelle avec les deux boîtes de TextView
se chevauchent. Le décalage des deux boîtes se fait à l'aide android:layout_gravity
tout 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>
Juste au cas où si vous voulez placer une vue sur le dessus d'un ButtonView puis utilisez cette;
android:elevation="7dp"
pour la vue qui doit être placé au-dessus du bouton.
Vous pouvez aussi le faire en utilisant ConstraintLayout une nouvelle mise en page introduit par google.
ConstraintLayout vous permet de créer des mises en page vastes et complexes avec une hiérarchie de vue à plat (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>
<?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>