我使用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>
答案 0 :(得分:170)
CardView应使用contentPadding
attributes it comes with:
<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>
答案 1 :(得分:57)
L-preview之前的CardView使用RoundRectDrawableWithShadow
绘制背景,覆盖Drawable.getPadding()
以添加阴影填充。视图背景在通胀后通过代码设置,它会覆盖XML中指定的任何填充。
您有两种选择:
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>
答案 2 :(得分:29)
如果您想在L前设备上使用CardView填充,并且在Lollipop +设备上看起来相同,那么您需要使用setUseCompatPadding(true)
或XML变体cardUseCompatPadding="true"
。
这是因为&#34; CardView添加额外的填充以在L之前在平台上绘制阴影。&#34; [1]因此,默认实现具有不同的API版本看起来不同并且视图可能无法正确排列。因此,解决该问题的最简单方法是采用上述方法,或者改为使用边距。
<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>
答案 3 :(得分:0)
这对我有用 - 将每个项目放在框架布局中
<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”而非工具,并在框架视图上设置负边距以保持阴影 - 工作正常。