Android View的elevation属性,CardView始终在布局顶层覆盖其它控件的解决方式;

elevation属性字面意思是海拔、你可以理解为它是控件的厚度;我们日常使用控件都是只在乎宽高的,这个控件的厚度却很少在意;如果你不太理解,看一下CardView覆盖其它控件的例子;

Android的控件CardView提供了一系列的圆角、阴影之类的属性,相当好用;但是当CardView和其它的控件在同一布局中时,始终覆盖其它控件;

先来看一下效果:

<RelativeLayout
    android:layout_alignParentBottom="true"
    android:layout_width="match_parent"
    android:layout_margin="15dp"
    android:layout_height="300dp">
    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:cardCornerRadius="6dp"
        app:cardBackgroundColor="#60CF7C"
        ></androidx.cardview.widget.CardView>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你好世界"
        android:textColor="#fff"
        android:textSize="33dp"
        android:layout_centerInParent="true"
        />
</RelativeLayout>

从代码可以看的出来,这个TextView是在CardView的上面的,按道理说应该是TextView在CardView上面显示,但是实际的效果TextView并没有显示;

--------------------------------------------------------------------------------------------------------------------

我们给TextView加上elevation属性试试:

<RelativeLayout
    android:layout_alignParentBottom="true"
    android:layout_width="match_parent"
    android:layout_margin="15dp"
    android:layout_height="300dp">
    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:cardCornerRadius="6dp"
        app:cardBackgroundColor="#60CF7C"
        ></androidx.cardview.widget.CardView>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你好世界"
        android:textColor="#fff"
        android:textSize="33dp"
        android:elevation="2dp"
        android:layout_centerInParent="true"
        />
</RelativeLayout>

呦、显示出来了(android:elevation="1dp"的时候还不显示,改为android:elevation="2dp"就显示了,看来CardView的默认厚度在1-2dp之间);

其实像Button、CardView、AppCompatButton类似的控件都有一定的厚度,会优先显示在其它控件的前面;

在同一布局(例如:RelativeLayout)中,厚度大的控件会先展示出来、盖住其它的控件;

如果你的CardView始终展示在最前面、控件被CardView覆盖了,何以减小CardView的elevation,或增加需要显示控件的elevation;

CardView是在Android 5.0 (API level 21)中引入的一个UI组件,它是一个可以显示阴影和圆角矩形背景的容器视图。在CardView中,可以使用android:outlineProvider属性来定义CardView的轮廓提供者,从而控制CardView的圆角和阴影效果。 默认情况下,CardView使用矩形轮廓提供者,因此它的边缘是直角的。可以通过设置android:radius属性来指定CardView的圆角半径,使CardView显示为圆角矩形。例如,以下代码将CardView的圆角半径设置为16dp: ``` <androidx.cardview.widget.CardView android:id="@+id/card_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="16dp" android:radius="16dp" android:elevation="8dp"> <!-- CardView的内容 --> </androidx.cardview.widget.CardView> ``` 如果需要自定义CardView的轮廓提供者,可以使用android:outlineProvider属性。例如,以下代码将CardView的轮廓提供者设置为一个自定义的圆角轮廓提供者: ``` <androidx.cardview.widget.CardView android:id="@+id/card_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="16dp" android:elevation="8dp" android:outlineProvider="@drawable/custom_outline_provider" android:clipToOutline="true"> <!-- CardView的内容 --> </androidx.cardview.widget.CardView> ``` 在这个例子中,我们使用了android:outlineProvider属性CardView的轮廓提供者设置为一个自定义的Drawable对象。需要注意的是,使用自定义的轮廓提供者时,还需要将android:clipToOutline属性设置为true,以确保CardView的内容不会绘制在轮廓之外。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值