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;