E 'possibile posizionare un punto di vista rispetto ad un altro in Android?
-
26-09-2019 - |
Domanda
Possiamo mettere una piccola vista su un altro grande punto di vista? Per esempio, ho un VideoView che sta svolgendo un file in background. Durante questo, da qualche parte nel / angolo di mezzo, voglio inserire un altro ImageView.
Ma in Lineare / Layout relativo, viste può essere eseguito solo uno dopo l'altro o l'uno rispetto all'altro, e AbsoluteLayout è sconsigliato. Allora, cosa devo fare?
Soluzione
FrameLayouts
consentono accumulano ogni vista in cima a quella sottostante. Ciò può essere ottenuto anche con un RelativeLayout
.
Altri suggerimenti
Il FrameLayout
è il ViewGroup
semplice e impila il Views
nell'ordine che stanno definiti nel layout XML (o aggiunti di programmazione); Il primo sarà più bassa, e l'ultima sarà in cima.
Ecco un esempio in cui due Views
vengono impilati e offset a meglio illustrare il punto:
Ecco l'XML effettiva disposizione con i due sovrapposte caselle TextView
. L'offset delle due scatole è fatto usando android:layout_gravity
mentre android:gravity
viene utilizzata per la centratura del testo stesso all'interno di ciascuna casella.
<?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>
Nel caso in cui, se si desidera inserire una vista sulla cima di una ButtonView quindi utilizzare questo;
android:elevation="7dp"
per la vista che deve essere posizionato sulla parte superiore del pulsante.
È anche possibile farlo utilizzando ConstraintLayout un nuovo layout introdotto da google.
ConstraintLayout consente di creare layout di grandi e complessi, con una gerarchia vista piatta (nessun annidati gruppi di vista).
<?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>