谷歌Design库里的控件还是很香的,CardView是Material Design的核心控件之一。
今天就用它来做一个小弹窗,大概是想要这种效果:
布局文件很简单,我定义了圆角和阴影:
<android.support.v7.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
...
app:cardCornerRadius="6dp"
app:cardElevation="6dp">
...
燃鹅,在我可爱的测试机上面跑了一下,发现并没有阴影,只有圆角。如果界面背景也是卡片的白色,就完全看不出来卡片的轮廓了。
很久之前我用CardView写过列表的item布局,完全没遇到这种问题啊,怎么肥事?
搜了下网上的博客:
关于CardView无法显示阴影的问题
CardView设置阴影无效的问题
依然没有解决我的问题,如果大家通过上述大佬的博客解决了,那后面不用看了。如果没解决,可以继续看,或许可以帮到你哦!
后来我意识到我的CardView是PopupWindow的根布局,可能Pop弹窗的层级和当前Activity页面层级不一样?带着这个猜测,我给CardView加上了z轴属性:
<android.support.v7.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
...
android:translationZ="6dp"
app:cardCornerRadius="6dp"
app:cardElevation="6dp">
...
dp大小自己随便定义,大于0即可,然后就成功显示阴影了。在Material Design中,控件在空间中不再只有x和y两轴平面坐标系,而是立体的,还有z轴,值越大,表示越高,可以理解为离用户的视距越近。
不过具体内部原理还不太清楚,或许也不是PopupWindow导致的,还待进一步研究。