CardView奇怪的行为

时间:2017-06-07 09:15:06

标签: android view background android-cardview elevation

我有一个使用CardView的简单布局

<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/cv_tag"
android:layout_width="wrap_content"
android:layout_height="@dimen/tag_height"
android:layout_margin="4dp"
android:clickable="true"
app:cardCornerRadius="20dp"
app:cardElevation="2dp">

<FrameLayout
    android:id="@+id/fl_selection_indicator"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tv_tag"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:padding="8dp"
        android:textAppearance="@style/PrimaryWhiteText.Tiny"
        tools:text="Hard"/>

</FrameLayout>

</android.support.v7.widget.CardView>

它的渲染效果并不像我预期的那样。看起来系统将此布局包装到具有高程和白色背景的FrameLayout中。有趣的是,如果我将此布局包装到FrameLayout中,我自己的高程消失但白色背景仍然存在(框架布局的背景不是CardView)

White background Elevation

如何删除海拔和白色背景以及为什么会发生这种情况?

提前致谢!

2 个答案:

答案 0 :(得分:1)

可能是API 21实施前的一个怪癖。

与此同时,您可能根本不需要CardView。考虑使用DrawableResource。

请参阅How do I set the rounded corner radius of a color drawable using xml?

旧回答:

默认情况下,CardView根据您的主题设置背景颜色。 这是样式的免除

<color name="cardview_dark_background">#FF424242</color>
<color name="cardview_light_background">#FFFFFFFF</color>

从视图的初始化

if (a.hasValue(R.styleable.CardView_cardBackgroundColor)) {
            backgroundColor = a.getColorStateList(R.styleable.CardView_cardBackgroundColor);
} else {
     // There isn't one set, so we'll compute one based on the theme
     final TypedArray aa = getContext().obtainStyledAttributes(COLOR_BACKGROUND_ATTR);
     final int themeColorBackground = aa.getColor(0, 0);
     aa.recycle();

     // If the theme colorBackground is light, use our own light color, otherwise dark
     final float[] hsv = new float[3];
     Color.colorToHSV(themeColorBackground, hsv);
     backgroundColor = ColorStateList.valueOf(hsv[2] > 0.5f
                    ? getResources().getColor(R.color.cardview_light_background)
                    : getResources().getColor(R.color.cardview_dark_background));
 }

要更改颜色,请使用app:cardBackgroundColor属性

答案 1 :(得分:1)

原始答案为here

我的latout用于自定义视图,当我添加setBackgroundColor(ContextCompat.getColor(context,android.R.color.transparent));它的结构高度和白色背景已经消失。