2014-07-03 5 views
32

Sto giocando con il nuovo CardView, ma i margini non sembrano essere applicabili.CardView layout_margin non funziona

<?xml version="1.0" encoding="utf-8"?> 

<android.support.v7.widget.CardView 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
android:id="@+id/card_view" 
android:layout_gravity="center" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_marginTop="18dp" 
android:layout_marginLeft="18dp" 
android:layout_marginRight="18dp" 
card_view:cardCornerRadius="4dp" 
card_view:cardBackgroundColor="#FFA" 
card_view:layout_margind="4dp"> 

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

<TextView 
    android:id="@+id/info_text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello World!"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello World!"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello World!"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello World!"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello World!"/> 

</LinearLayout> 

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

A proposito, lo utilizzo in un frammento che si trova in un ViewPager. La scheda estende l'intera larghezza dello schermo (match_parent) anche se sto usando Android: layout_marginLeft = "18dp" e android: layout_marginRight = "18dp" sul CardView.

Qualche idea su cosa potrei fare male?

risposta

17

ho avuto gli stessi problemi prima, ho trovato risposta qui ... CardView layout_width="match_parent" does not match parent RecyclerView width

Al momento di gonfiare xml CardView all'interno del vostro ViewPager, passare il ViewGroup in esso. questo permetterà al gonfiatore di sapere quali parametri di layout devono riferirsi.

per gonfiare il file di layout uso qualcosa come di seguito:

View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.view_list_item, viewGroup,false); 

Speranza che aiuta

+0

Dove vorrei utilizzare quel codice? Sto usando un FragmentStatePagerAdapter. –

+0

nel momento in cui si sta gonfiando la vista, sia in frammento che in adattatore. –

+0

questo ha funzionato per me – yeahdixon

30

Se si utilizza RecyclerView aggiungere a schede, Android: layout_margin dovrebbe essere sufficiente.

Ma usando ListView aggiungere a schede, si potrebbe fare questo:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" > 

<android.support.v7.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="11dp" 
    android:layout_marginRight="11dp" 
    android:layout_marginTop="11dp"> 
     (other layout ...) 
</android.support.v7.widget.CardView> 

</FrameLayout> 

Ma non è di solito quello ottimale.

+0

Sembra un brutto trucco, ma ha funzionato per me. Lo farò fino a quando non convertirò in 'RecylerView'. – KickingLettuce

+3

AbsListView.LayoutParams non estende ViewGroup.MarginLayoutParams. http://developer.android.com/reference/android/widget/AbsListView.LayoutParams.html Pertanto, i margini non funzioneranno per le viste figlio immediate. RecyclerView.LayoutParams estende MLP, per fortuna. –

0

Aggiungere margini per RecyclerView o ListView invece su scheda Visualizza o riga oggetto layout