J'ai une mise en page linéaire qui se compose d'une vue d'image et d'une vue de texte, l'une en dessous de l'autre dans une mise en page linéaire.
<LinearLayout android:orientation="horizontal" ... >
<ImageView
android:id="@+id/thumbnail"
android:layout_weight="0.8"
android:layout_width="0dip"
android:layout_height="fill_parent">
</ImageView>
<TextView
android:id="@+id/description"
android:layout_weight="0.2"
android:layout_width="0dip"
android:layout_height="wrap_content">
</TextView>
Certaines règles peuvent manquer, c'est pour donner une idée de l'apparence de la mise en page. Je veux une autre petite vue texte de disons 50dip de longueur et de largeur, placée sur la vue d'image, par "au-dessus", je voulais dire plus que l'index z que la vue d'image, je veux le placer, au centre et au-dessus (chevauchant) la vue d'image.
Je veux savoir comment placer une vue au-dessus de l'autre, avec un z-index variable (de préférence en disposition linéaire)?
Essayez de
.bringToFront()
:http://developer.android.com/reference/android/view/View.html#bringToFront%28%29
la source
RelativeLayout fonctionne de la même manière, la dernière image de la mise en page relative l'emporte.
la source
Modification de l'ordre de tirage
Une alternative consiste à modifier l'ordre dans lequel les vues sont dessinées par le parent. Vous pouvez activer cette fonctionnalité à partir de ViewGroup en appelant setChildrenDrawingOrderEnabled (true) et en remplaçant getChildDrawingOrder (int childCount, int i) .
Exemple:
Production:
Un appel
OrderLayout#setDrawOrder(int)
avec 0-1-2 se traduit par:la source
Vous pouvez utiliser à
view.setZ(float)
partir du niveau de l' API 21. Ici , vous pouvez trouver plus d' informations.la source
Compatibility: API < 21: No-op
. Je pense donc que cela ne fonctionnera pasJ'ai résolu le même problème en ajoutant
android:elevation="1dp"
à quelle vue vous le voulez par rapport à une autre. Mais il ne peut pas s'afficher en dessous de 5.0, et il y aura un peu d'ombre, si vous pouvez l'accepter, c'est OK.Donc, la solution la plus correcte qui est @kcoppock a dit.
la source
Essayez ceci dans un RelativeLayout:
Ça marche pour moi.
la source
Il existe un moyen d'utiliser LinearLayout. Définissez simplement le marginTop de votre élément précédent sur la valeur négative correspondante et assurez-vous que l'élément que vous voulez en haut se trouve après l'élément que vous souhaitez en dessous dans votre XML.
la source
AFAIK vous ne pouvez pas le faire avec des dispositions linéaires, vous devrez opter pour un RelativeLayout .
la source
Si vous ajoutez la vue par programme, vous pouvez utiliser
yourLayout.addView(view, 1);
où
1 is the index
.la source
J'utilise ceci, si vous voulez qu'une seule vue soit mise en avant en cas de besoin:
containerView est le conteneur de vues à trier, topView est la vue que je veux avoir comme top le plus dans le conteneur.
pour que plusieurs vues soient organisées, il est sur le point d'utiliser setChildrenDrawingOrderEnabled (true) et de remplacer getChildDrawingOrder (int childCount, int i) comme mentionné ci-dessus.
la source