如何在Android L中设置CardView小部件的填充

uemypmqf  于 2023-08-01  发布在  Android
关注(0)|答案(5)|浏览(131)

我正在使用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>

字符串

krugob8w

krugob8w1#

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>

字符串

kg7wmglp

kg7wmglp2#

L预览之前的CardView使用RoundRectDrawableWithShadow绘制其背景,该背景覆盖Drawable.getPadding()以添加阴影填充。视图背景在展开后通过代码设置,这将覆盖XML中指定的任何填充。
您有两种选择:
1.在运行时使用View.setPadding()设置填充,并注意调整阴影(但仅在L预览之前!).
1.将所有内容放置在指定填充的布局内。
后一种选择是最安全的。

<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>

字符串

kmbjn2e3

kmbjn2e33#

如果你想在L前设备上使用CardView填充,并且在Lollipop+设备上看起来相同,那么你需要使用setUseCompatPadding(true),或者XML变体cardUseCompatPadding="true"
这是因为“CardView添加了额外的填充以在L之前的平台上绘制阴影。”[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>

字符串

来源

[1]CardView.setUseCompatPadding(boolean)
[2]android.support.v7.cardview:cardUseCompatPadding

dy2hfwbg

dy2hfwbg4#

这就是我的工作-把每个项目放在一个框架布局中

<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”而不是工具,并在框架视图上设置负边距以保持阴影-工作正常。

xfyts7mz

xfyts7mz5#

只需在下面添加两行

<androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="24dp"
            android:layout_marginRight="16dp"
            android:layout_marginBottom="24dp"
            android:layout_marginLeft="16dp"
            app:cardUseCompatPadding="true" // add this line
            app:contentPadding="16dp" // add this line`enter code here`
            app:cardCornerRadius="8dp"
           >
        </androidx.cardview.widget.CardView>

字符串
就这样享受你的编程…

相关问题