web-dev-qa-db-ja.com

CardViewのlayout_marginが正しく機能していません

新しいCardViewで遊んでいますが、マージンが適用されていないようです。

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

ちなみに、私はそれをFragmentで、つまりViewPagerで使用しています。 CardViewAndroid:layout_marginLeft="18dp"およびAndroid:layout_marginRight="18dp"を使用している場合でも、カードは画面の幅全体に広がります(match_parent)。

私が間違っている可能性のあるアイデアはありますか?

35
Eric Cochran

ViewPager.LayoutParamsはViewGroup.MarginLayoutParamsを拡張しません

とても簡単です。

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

6
Eric Cochran

RecyclerViewを使用してCardViewを追加する場合、Android:layout_marginで十分です。

ただし、ListViewを使用してCardViewを追加するには、次のようにします。

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

しかし、通常は最適なものではありません。

34
zonda

以前にも同じ問題がありました、ここで答えを見つけました... CardView layout_width = "match_parent"は親RecyclerViewの幅と一致しません

ViewPager内でCardView xmlを拡張するときに、ViewGroupを渡します。これにより、インフレータは参照するレイアウトパラメータを知ることができます。

レイアウトファイルをインフレートするには、次のようなものを使用します。

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

役立つことを願っています

19
Nixit Patel

app:cardPreventCornerOverlapプロパティをfalse cardView <Android.support.v7.widget.CardView ... app:cardPreventCornerOverlap="false" ...

0
Jorge Arindia