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

本文介绍了Android中elevation属性,它可理解为控件的厚度。以CardView覆盖其他控件为例,说明在同一布局中,厚度大的控件会优先展示并盖住其他控件。若控件被CardView覆盖,可减小CardView的elevation或增加需显示控件的elevation。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

Android中的elevation属性用于在视图中实现阴影效果,从而增强UI的层次感和视觉吸引力。这个属性通常应用于Material Design风格的应用中,以模拟现实世界中的光影效果。 ### 如何使用elevation属性 1. **基本用法**: - 你可以在XML布局文件中直接给视图组件添加`android:elevation`属性来设置阴影的高度。例如,为一个按钮设置2dp的阴影: ```xml <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click Me" android:elevation="2dp" /> ``` - 同样地,你也可以在Java或Kotlin代码中动态设置elevation属性。例如,在Activity中设置一个视图的阴影高度: ```java Button button = findViewById(R.id.my_button); button.setElevation(4f); // 单位是像素 ``` 2. **注意事项**: - elevation的值越大,阴影越明显,但同时也可能影响性能,特别是在低端设备上。因此,合理使用elevation值非常重要。 - 确保你的视图背景不是完全透明的。如果背景是完全透明的,阴影将不会显示。 - 在某些情况下,你可能需要结合使用`translationZ`属性来调整视图在Z轴上的位置,以实现更复杂的视觉效果。 3. **兼容性考虑**: - elevation属性是在API级别21(Lollipop)引入的。如果你的应用需要支持更低版本的Android系统,你可能需要考虑使用第三方库如`CardView`或`MaterialCardView`来模拟阴影效果。 通过合理使用elevation属性,你可以使你的应用界面看起来更加现代和吸引人。不过,也要注意不要过度使用,以免影响应用的性能和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值