如何在Android L中设置CardView小部件的填充
我正在使用如何在Android L中设置CardView小部件的填充,android,padding,android-5.0-lollipop,android-cardview,Android,Padding,Android 5.0 Lollipop,Android Cardview,我正在使用android:paddingLeft和android:paddingTop为新的cardwiew小部件设置填充,但它不起作用 我可以为CardView中的所有控件设置边距,作为一种解决方法,但如果控件太多,这会很麻烦 如何为新的cardview小部件设置填充 <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:i
android:paddingLeft
和android:paddingTop
为新的cardwiew
小部件设置填充,但它不起作用
我可以为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中指定的任何填充
您有两个选择:
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应使用以下方法处理此问题:
如果您想在pre-L设备上使用CardView填充,并使其在棒棒糖+设备上看起来相同,则需要使用
setUseCompatPadding(true)
或XML变量cardUseCompatPadding=“true”
这是因为“CardView添加了额外的填充以在L之前的平台上绘制阴影”[1]因此,默认实现的API版本不同,视图可能无法正确对齐。因此,解决这一问题的最简单方法是采用上述方法,或者使用保证金
示例代码
[2] 这对我来说很有用——将每个项目都放在框架布局中
<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>
“而且不是工具,还可以在框架视图上设置负边距以保持阴影-效果很好。您是在L preview或其他操作系统版本上进行测试吗?在Kitkat 4.4.4上进行测试。cardview显示出来,除了填充外,所有内容看起来都很好。OP至少有第三个选项:接受yarian的答案。@MichelJung,yarian的答案对您来说不起作用。”在Android4.1.2上运行r me,因此使用这个答案中建议的包装器可能是一个更安全的选择属性,为什么CardView不能将padding属性复制到它自己的内部contentPadding中?我们应该记住/知道CardView有一种叫做contentPadding的东西,我们应该用它来代替padding@MichelJung@GregEnnis因为为CardView定义填充是有意义的。事实上,Android系统就是这样做的:在L之前,CardView在其内容中添加了填充,并在该区域绘制阴影。这个填充量等于侧面的maxCardElevation+(1-cos45)*cornerRadius和顶部和底部的maxCardElevation*1.5+(1-cos45)*cornerRadius。
这是一个区分应用于卡片背景的填充和内部内容填充的问题。@yarian根本没有回答我的问题。事实上,这只会让事情变得更糟。我不知道Android开发新手会如何处理这个问题out@yarian知道如何在自定义样式(styles.xml
)中指定card\u view:contentPadding
吗?这在运行Android 7.1的手机上非常适合我。然而,它对我的另一部运行安卓4.1.2的手机没有任何影响。这正是我所需要的。非常感谢。即使我设置了card\u view:cardUseCompatPadding=“true”
,运行Android 4.1.2.Perfect的手机上仍然没有填充。谢谢
<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>
<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>