15

Ho un semplice FrameLayout con supporto CardView come primo elemento e TextView come secondo, quindi TextView deve essere in cima alla visualizzazione gonfiata. Funziona su pre-Lolipop ma su 21+ la carta occupa il punto più alto nel layout, perché è così e come risolverlo? Stessa cosa con RelativeLayout. Layout:CardView va sopra FrameLayout, ma dichiarato prima

<?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> 
+0

Basta aggiungere la visualizzazione del testo all'interno della vista della scheda, mappe come so che l'ordine z non è definito all'interno di un layout di cornice, ma l'ultima vista deve essere disegnata per ultima. Questo probabilmente ha a che fare con le viste delle carte nell'elevazione dell'uso del lecca-lecca mentre ricadono sul pre-lollipop del codice di disegno del bordo. – JohanShogun

+0

In effetti ho bisogno della carta solo per lo sfondo e le belle curve con l'ombra. Inoltre c'è RecyclerView sulla parte superiore della carta con altre carte, i loro angoli devono sovrapporsi alla carta principale. Ho trovato il modo di risolverlo in 21+. –

risposta

7

è sufficiente aggiungere il testo vista all'interno della vista della carta, per quanto ne so l'ordine z è definito all'interno di un layout di cornice, ma l'ultima vista disposti dovrebbe essere elaborato per ultimo.

Questo probabilmente ha a che fare con le viste delle carte in altezza con l'uso del lecca-lecca mentre ricadono sul pre-lollipop del codice di disegno del bordo.

+0

Sì, hai ragione, l'impostazione dell'elevazione per TextView risolve il problema su 21+. –

+0

Eventuali problemi rimanenti? Sembra che abbia funzionato sia con il lecca-lecca sia con il lecca-lecca? :) – JohanShogun

+0

Ho avuto il mio set di cardview un'altezza di 4 dpi. E la mia cornice con il matchparent stava andando sotto il cardview. Imposta l'elevazione di framelayout come 5dp e viene eseguita. Nessun problema finora. –

26

Nel caso in cui qualcuno arrivi qui e la soluzione per l'impostazione dell'elevazione non funzioni per loro (come nel mio caso, dove dovevo disegnare un'immagine sopra lo CardView e avere un'ombra sopra non era accettabile), è possibile risolvere il problema avvolgendo lo CardView all'interno di un altro FrameLayout. Nell'esempio fornito, sarebbe simile a questa:

<?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> 
+0

non è riuscito a capire come funziona. Ma funziona come un fascino .. –

+0

ha funzionato per me. Questa risposta dovrebbe essere accettata !! – JohannaNoobie

3

Questo ha funzionato per me!

<?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>