Android:paddingLeft
とAndroid: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>
L-previewより前のCardViewは、RoundRectDrawableWithShadow
を使用してその背景を描画し、Drawable.getPadding()
をオーバーライドしてシャドウパディングを追加します。ビューの背景は、インフレーション後にコードを介して設定され、XMLで指定されたパディングをオーバーライドします。
次の2つのオプションがあります。
View.setPadding()
を使用して実行時にパディングを設定し、シャドウの調整に注意してください(ただし、Lプレビューの前のみ!)。後者のオプションが最も安全です。
<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>
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>
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>
styles.xmlでCardViewのパディングを設定する方法を検索するためにここに来ました。なぜならAndroid:padding
は機能していませんでした。 (私はこれがOPが求めていたものではないことを知っていますが、それは十分に関連すると信じています)
Styles.xmlでは、contentPadding
を使用するだけでパディングを設定できます
<style name="myCardViewStyle" parent="CardView">
<item name="contentPadding">20dp</item>
このソリューションは、styles.xmlでCardViewのパディングスタイル属性を設定するためのものです
これは私のために働いたものです-すべてのアイテムをフレームレイアウトに入れます
<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 "であり、ツールではないことを再確認します。また、影を維持するためにフレームビューに負のマージンを設定します-正常に動作します。