2015-12-30 6 views
12

Ho un XML di layout:Come portare imageView davanti a cardview? Quando entrambi sono di Childs layout relativi

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/containor" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#fff6da" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.vats.vatishs.cardviewprogrammatically.MainActivity"> 

     <FrameLayout 
      android:id="@+id/card" 
      android:layout_width="220dp" 
      android:layout_marginTop="10dp" 
      android:layout_height="wrap_content"> 

      <TextView 
       android:background="@color/white" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:padding="10dp" 
       android:text="Hello I am a text View." /> 

     </FrameLayout> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="210dp" 
     android:background="@drawable/select_delete_chim" /> 

</RelativeLayout> 

che funziona bene. Il risultato sarà una vista immagine sopra layout del frame ma quando uso il seguente XML in cui devo sostituire la layout cornice con CardView:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/containor" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#fff6da" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.vats.vatishs.cardviewprogrammatically.MainActivity"> 

     <android.support.v7.widget.CardView 
      android:id="@+id/card" 
      android:layout_width="220dp" 
      android:layout_marginTop="10dp" 
      android:layout_height="wrap_content"> 

      <TextView 
       android:background="@color/white" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:padding="10dp" 
       android:text="Hello I am a text View." /> 

     </android.support.v7.widget.CardView> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="210dp" 
     android:background="@drawable/select_delete_chim" /> 
</RelativeLayout> 

allora il risultato sarà: ImageView sul retro CardView.

Qualche soluzione per questo?

Un'altra cosa, funzionerà bene sui dispositivi pre-lecca-lecca ma sul lecca-lecca non funziona.

Output with CardView on pre-lollipop devices (required output)

Output with CardView on lollipop devices

risposta

34

CardView ha un'elevazione di default che è maggiore di ImageView, quindi dobbiamo aggiungere una maggiore elevazione in ImageView rispetto all'elevazione di CardView.

ad es. imageView.setElevation(10); e cardView.setElevation(5);

Ora funziona correttamente su tutti i dispositivi.

+3

Puoi anche fare quanto sopra nel tuo xml come segue: android: elevation = "10dp" per ImageView e card_view: cardElevation = "5dp" per CardView. – ProgDevCode

+1

funziona solo con il lecca-lecca e sopra –

+0

grazie a @Vatish Sharma, ha funzionato anche per me –

1

Scrivete immagine sopra a schede, si spera che risolve il problema

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/containor" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#fff6da" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.vats.vatishs.cardviewprogrammatically.MainActivity"> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="210dp" 
     android:src="@drawable/select_delete_chim" /> 

     <android.support.v7.widget.CardView 
      android:id="@+id/card" 
      android:layout_width="220dp" 
      android:layout_marginTop="10dp" 
      android:layout_height="wrap_content"> 

      <TextView 
       android:background="@color/white" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:padding="10dp" 
       android:text="Hello I am a text View." /> 

     </android.support.v7.widget.CardView> 

    </RelativeLayout> 
+0

No, non funziona. Anche il mio primo layout di frame i.e xml fallirà se cambio la posizione della vista dell'immagine in xml –

+0

e uso anche src invece di sfondo – Madhur

+0

Non ha alcun effetto sul suo funzionamento. –

3

Write questa riga nel codice Java dopo l'inizializzazione del ImageView.

imageView.bringToFront();

+0

Ho provato ma non funziona. –

+0

Invia codice java per favore. –

+0

niente di speciale nel codice, c'è solo il metodo onCreate() in cui ho chiamato setContentView() –

1

fare in questo modo,

<android.support.v7.widget.CardView 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/myCardView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    card_view:cardBackgroundColor="@android:color/transparent" 
    card_view:cardElevation="0dp"> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_edit" 
      android:background="@android:color/transparent"/> 

</android.support.v7.widget.CardView> 

Porterà la ImageView al fronte.

+0

Aggiungi elevazione come "0dp". – priyanka

+0

non voglio che imageView diventi figlio di cardView, perché imageView è un'icona a croce che devo visualizzare all'angolo di cardview in modo tale che appaia 1/4 di cardView e resto fuori da cardView. –

+0

modificato l'ans. L'imageView deve essere in cardview separato con sfondo trasparente. E puoi posizionarlo ovunque sia richiesto. – priyanka

Problemi correlati