Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android L中设置CardView小部件的填充_Android_Padding_Android 5.0 Lollipop_Android Cardview - Fatal编程技术网

如何在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>