J'ai FrameLayout simple avec le support CardView comme premier élément, et TextView comme deuxième, donc TextView doit être au-dessus de la vue gonflée. Cela fonctionne sur pré-Lolipop mais sur les cartes 21+, la place est la plus importante dans la mise en page, pourquoi en est-il ainsi et comment y remédier? Même chose avec RelativeLayout. Disposition:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Android.support.v7.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="200dp"
Android:layout_margin="20dp"
app:cardBackgroundColor="#ff0000"
app:cardUseCompatPadding="false"
/>
<TextView
Android:layout_width="match_parent"
Android:layout_height="100dp"
Android:text="i am top view!"
Android:gravity="center"
Android:layout_gravity="center"
Android:textSize="30sp"
Android:textAllCaps="true"
Android:textColor="#00ff00"
Android:background="#0000ff"
/>
</FrameLayout>
Ajoutez simplement votre affichage de texte à l'intérieur de l'affichage de la carte, pour autant que je sache, l'ordre z n'est pas défini à l'intérieur d'une disposition de cadre, mais la dernière vue présentée doit être dessinée en dernier.
Cela a probablement à voir avec le fait que les vues de carte dans Lollipop utilisent l'élévation alors qu'elles se rabattent sur le code de dessin de bordure avant Lollipop.
Si quelqu'un arrive ici et que la solution pour définir l'élévation ne fonctionne pas pour eux (comme dans mon cas, où je devais dessiner une image au-dessus de CardView
et avoir une ombre dessus n'était pas acceptable), vous peut résoudre le problème en enveloppant le CardView
dans un autre FrameLayout
. Dans l'exemple fourni, cela ressemblerait à ceci:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<!-- This is the added FrameLayout -->
<FrameLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Android.support.v7.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="200dp"
Android:layout_margin="20dp"
app:cardBackgroundColor="#ff0000"
app:cardUseCompatPadding="false"
/>
</FrameLayout>
<TextView
Android:layout_width="match_parent"
Android:layout_height="100dp"
Android:text="i am top view!"
Android:gravity="center"
Android:layout_gravity="center"
Android:textSize="30sp"
Android:textAllCaps="true"
Android:textColor="#00ff00"
Android:background="#0000ff"
/>
</FrameLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<!-- Add this layout as parent of CardView -->
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Android.support.v7.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="200dp"
Android:layout_margin="20dp"
app:cardBackgroundColor="#ff0000"
app:cardUseCompatPadding="false" />
</LinearLayout>
<!--Close parent layout-->
<TextView
Android:layout_width="match_parent"
Android:layout_height="100dp"
Android:layout_gravity="center"
Android:background="#0000ff"
Android:gravity="center"
Android:text="i am top view!"
Android:textAllCaps="true"
Android:textColor="#00ff00"
Android:textSize="30sp" />
</FrameLayout>
Je vais peut-être rejoindre la discussion un peu tard, mais si vous pouvez vous permettre d'abandonner l'élévation de CardView
, vous pouvez simplement définir la propriété cardElevation
de CardView
dans votre mise en page XML à 0dp
.
Ainsi:
app:cardElevation="0dp"