web-dev-qa-db-ja.com

Android LでCardViewウィジェットのパディングを設定する方法

Android:paddingLeftAndroid:paddingTopを使用して新しいCardViewウィジェットのパディングを設定していますが、機能しません。

回避策としてCardView内のすべてのコントロールにマージンを設定できますが、コントロールが多すぎる場合は苦痛です。

新しいcardviewウィジェットのパディングを設定する方法は?

<Android.support.v7.widget.CardView
    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="200dp"
    Android:paddingLeft="20dp"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="20dp"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    card_view:cardCornerRadius="2dp">

    <TextView
        Android:id="@+id/info_text"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="Hello World!"/>
</Android.support.v7.widget.CardView>
60
nomongo

L-previewより前のCardViewは、RoundRectDrawableWithShadowを使用してその背景を描画し、Drawable.getPadding()をオーバーライドしてシャドウパディングを追加します。ビューの背景は、インフレーション後にコードを介して設定され、XMLで指定されたパディングをオーバーライドします。

次の2つのオプションがあります。

  1. View.setPadding()を使用して実行時にパディングを設定し、シャドウの調整に注意してください(ただし、Lプレビューの前のみ!)。
  2. パディングを指定するレイアウト内にすべてを配置します。

後者のオプションが最も安全です。

<Android.support.v7.widget.CardView
    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="200dp"
    card_view:cardCornerRadius="2dp">

    <FrameLayout
        Android:paddingLeft="20dp"
        Android:paddingRight="@dimen/activity_horizontal_margin"
        Android:paddingTop="20dp"
        Android:paddingBottom="@dimen/activity_vertical_margin">

        <TextView
            Android:id="@+id/info_text"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:text="Hello World!"/>
    </FrameLayout>
</Android.support.v7.widget.CardView>
61
alanv

CardViewは、 contentPadding付属の属性 を使用してこれを処理する必要があります。

<Android.support.v7.widget.CardView
    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="200dp"
    card_view:cardCornerRadius="2dp"
    card_view:contentPaddingLeft="20dp"
    card_view:contentPaddingRight="@dimen/activity_horizontal_margin"
    card_view:contentPaddingTop="20dp"
    card_view:contentPaddingBottom="@dimen/activity_vertical_margin">

    <TextView
        Android:id="@+id/info_text"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="Hello World!"/>
</Android.support.v7.widget.CardView>
174
yarian

L以前のデバイスでCardViewパディングを使用し、Lollipop +デバイスで同じように表示する場合は、setUseCompatPadding(true)またはXMLバリアントcardUseCompatPadding="true"を使用する必要があります。

これは、「CardViewが追加のパディングを追加してLの前にプラットフォームに影を描画する」ためです。したがって、その問題を修正する最も簡単な方法は、上記の方法、または代わりにマージンを使用することです。

サンプルコード

<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:layout_width="match_parent"
    Android:layout_height="wrap_context"
    card_view:cardUseCompatPadding="true"
    card_view:contentPadding="8dp"
    card_view:cardCornerRadius="4dp" >

    ...

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

ソース

[1] CardView.setUseCompatPadding(boolean)

[2] Android.support.v7.cardview:cardUseCompatPadding

29
Anonsage

styles.xmlでCardViewのパディングを設定する方法を検索するためにここに来ました。なぜならAndroid:paddingは機能していませんでした。 (私はこれがOPが求めていたものではないことを知っていますが、それは十分に関連すると信じています)

Styles.xmlでは、contentPaddingを使用するだけでパディングを設定できます

<style name="myCardViewStyle" parent="CardView">
    <item name="contentPadding">20dp</item>

このソリューションは、styles.xmlでCardViewのパディングスタイル属性を設定するためのものです

0
O95

これは私のために働いたものです-すべてのアイテムをフレームレイアウトに入れます

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
 Android:layout_marginBottom="-4dp">

   <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:background="@color/white_three"
            Android:orientation="vertical"
            card_view:cardCornerRadius="2dp"
            card_view:cardElevation="@dimen/card_elevation"
            card_view:cardMaxElevation="0dp"
            card_view:cardPreventCornerOverlap="false"
            card_view:cardUseCompatPadding="true"
   </Android.support.v7.widget.CardView>

Card_viewが " http://schemas.Android.com/apk/res-auto "であり、ツールではないことを再確認します。また、影を維持するためにフレームビューに負のマージンを設定します-正常に動作します。