web-dev-qa-db-fra.com

layout_margin dans CardView ne fonctionne pas correctement

Je joue avec le nouveau CardView, mais les marges ne semblent pas s'appliquer.

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

Par ailleurs, je l'utilise dans un Fragment qui est dans un ViewPager. La carte étend toute la largeur de l'écran (match_parent) même si j'utilise Android:layout_marginLeft="18dp" et Android:layout_marginRight="18dp" sur le CardView.

Des idées sur ce que je pourrais faire de mal?

35
Eric Cochran

ViewPager.LayoutParams n'étend pas ViewGroup.MarginLayoutParams

C'est si simple.

http://developer.Android.com/reference/Android/support/v4/view/ViewPager.LayoutParams.html

6
Eric Cochran

Si vous utilisez RecyclerView pour ajouter CardView, Android: layout_margin devrait être suffisant.

Mais en utilisant ListView pour ajouter CardView, vous pouvez faire ceci:

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

Mais ce n'est généralement pas optimal.

34
zonda

J'ai eu les mêmes problèmes auparavant, j'ai trouvé la réponse ici ... CardView layout_width = "match_parent" ne correspond pas à la largeur de RecyclerView parent

Au moment de gonfler le XML CardView à l'intérieur de votre ViewPager, passez le ViewGroup dedans. cela permettra au gonfleur de savoir à quels paramètres de mise en page se référer.

Pour gonfler le fichier de mise en page, utilisez quelque chose comme ci-dessous:

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

J'espère que cela pourra aider

19
Nixit Patel

Définissez app: cardPreventCornerOverlap propriété sur false dans cardView <Android.support.v7.widget.CardView ... app:cardPreventCornerOverlap="false" ...

0
Jorge Arindia