CardView all'interno di RecyclerView ha margini supplementari

Sto utilizzando un CardView come elemento all'interno di un RecyclerView. In questo modo Androide genera automaticamente margini tra il cardView e lo schermo e tra i cardViews diversi.

<android.support.v7.widget.CardView 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:background="@color/galleryCardBGColor" app:cardCornerRadius="2dp" > <android.support.v7.widget.RecyclerView android:id="@+id/my_recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" /> 

Ho seguito le istruzioni del link per integrarle nel mio progetto: using-recyclerview-and-cardview-in-eclipse-adt

  • Android: Linear Layout nuova linea
  • Come get il nome di operatore che è connesso a Internet in dual SIM Android?
  • Sorgente luminosa all'interno di una stanza che agisce inaspettatamente
  • Lancio del gestore Android SDK - La directory di strumenti non esiste? Mac
  • Distriggers lo spostamento tra le tabs
  • get l'errore chiave di notifica 401 gcm https://android.googleapis.com/gcm/googlenotification
  • Avevo già utilizzato un linearlayout per l'elemento di list:

     <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > 

    Questo funzionava perfettamente bene, senza alcun margine tra gli elementi della list. Ora ho appena posizionato il layout lineare all'interno del cardView che ha portto a margini supplementari.

    Il motivo è che voglio fornire margini esatti a questi elementi e tutti i margini che fornisco ora sono aggiunti a questo margine preesistente. Ho provato a fornire i paddings / margini zero / negativi all'elemento cardView ma nessuno di questi funziona.

    Qualsiasi idea, posso rimuovere questi margini o altrimenti sapere esattamente quanti margini vengono aggiunti.

  • Android: Come impedire l'image scalata in ImageView o ImageButton?
  • setHintTextColor () in EditText
  • Come configurare proguard SOLO per rimuovere le chiamate di logging di android
  • MediaPlayer setDataSource, meglio utilizzare il path o FileDescriptor?
  • Android: colbind un SoftKeyboard (InputMethodService) a un EditText
  • Android nasconde / apre l'applicazione icona in modo programmato
  • 11 Solutions collect form web for “CardView all'interno di RecyclerView ha margini supplementari”

    hai controllato se è margine o imbottitura? (Opzioni di sviluppo / limiti di layout di visualizzazione)

    CardView aggiunge l'imbottitura in piattaforms pre-L per disegnare ombre. In L, a less che non si imposta useCompatPadding=true , non ci dovrebbero essere dei divari.

    L'aggiunta di margini negativi (anche se è brutto) dovrebbe funzionare. In caso contrario, aggiungere un numero maggiore di codice su come li aggiungete e come impostare RecyclerView .

    Ha funzionato per me. Uso:

      card_view:cardElevation="0dp" card_view:cardMaxElevation="0dp" 

    Semplicemente descritto nella risposta di @yigit, il CardView aggiunge un'imbottitura predefinita per disegnare l'ombra prima di Android L. La dimensione del padding è descritta nel documento di CardView.

    Ho trovato il modo per eliminare questo riempimento (anche per aggiungere il riempimento per il contenuto) è quello di utilizzare gli attributi ContentPaddingLeft (/ Right / Top / Bottom) di CardView.

    Se si desidera cancellare l'imbottitura predefinita, è ansible impostare il contenutoPadding al valore less. Se si desidera aggiungere l'imbottitura dei contenuti, impostare il contenutoPadding sul valore desiderato.

    Nel mio caso, utilizzo questi codici per cancellare l'imbottitura predefinita:

     card_view:contentPaddingLeft="-3dp" card_view:contentPaddingRight="-3dp" card_view:contentPaddingTop="-3dp" card_view:contentPaddingBottom="-3dp" 

    Ho provato la risposta di @Shubham, ma un IllegalStateException viene lanciato in RadialGradient.java con il messaggio "il raggio deve essere> 0".

    Utilizza questi due tag sotto:

     card_view:cardPreventCornerOverlap="false" card_view:cardUseCompatPadding="true" 

    aggiungere card_view:cardPreventCornerOverlap="false" alla tua card Funziona solo se la tua image ha angoli arrotondati

    Beh, sembra che ci sia un modo molto più semplice per farlo, senza indovinare l'imbottitura e tutto:

     card_view:cardPreventCornerOverlap="false" 

    o utilizzando java:

     cardView.setPreventCornerOverlap(false) 

    Il commento da @ vj9 sotto la domanda accettata mi ha aiutato a calcolare gli offset. Condividilo qui perché potrebbe aiutare qualcun altro:

     public static int getVerticalCardViewOffset(Context context) { Resources res = context.getResources(); int elevation = res.getDimensionPixelSize(R.dimen.cardview_default_elevation); int radius = res.getDimensionPixelSize(R.dimen.cardview_default_radius); return (int) (elevation * 1.5 + (1 - Math.cos(45)) * radius); } public static int getHorizontalCardViewOffset(Context context) { Resources res = context.getResources(); int elevation = res.getDimensionPixelSize(R.dimen.cardview_default_elevation); int radius = res.getDimensionPixelSize(R.dimen.cardview_default_radius); return (int) (elevation + (1 - Math.cos(45)) * radius); } 

    uso

     android:adjustViewBounds="true" 

    sulla vista che si desidera avvolti nella scheda

    So che è tardi, ma spero che possa aiutare qualcuno

     app:cardPreventCornerOverlap="false" 

    impostazione app: cardPreventCornerOverlap a false farà il trucco 🙂

    Se non è necessario il raggio d'angolo o il livello di FrameLayout in altezza, è consigliabile utilizzare FrameLayout sul pre-Lollipop.

    <include layout="@layout/card_view_compat" />

    layout / card_view_compat

     <merge xmlns:android="http://schemas.android.com/apk/res/android" > <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" > <include layout="@layout/content" /> </FrameLayout> </merge> 

    layout V21 / card_view_compat

     <merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="match_parent" app:cardCornerRadius="3dp" app:cardElevation="4dp" > <include layout="@layout/content" /> </android.support.v7.widget.CardView> </merge> 

    myCardView.setShadowPadding (0,0,0,0);

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.