Android设置android:elevation无效?那是你的姿势不对!
程序员文章站
2022-06-06 15:30:21
...
因为本人开发的一个app是套壳应用,所以MainActivity可能会被多个product用到,最开始在某一个product开发UI的时候用到了android:elevation这个属性,能够营造出阴影的效果,没有任何问题。过了一段时间另一个product也需要用到MainActivity,因为是套的是webview加载H5页面,H5开发小伙伴用到了一个绘制图表的功能,但是最终运行到app的时候发现图表无法正常展示,当时查了半天这个问题是因为Activity开启了硬件加速,当把MainActivity的android:hardwareAccelerated="false"设置成false时,再看webview能正常显示图表,这就为后续埋下了坑!
今天再看之前的product中个人中心的页面时,头部不显示阴影效果了
但是这块代码并没有动过,阴影设置的代码也是正确的,那就很奇怪了,在网上查了一些资料,都是说什么没有给view设置background的话elevation是不起作用的,这些都是常识,如果有同学是因为这个导致的,那就可以走了,有的说要加上这一行android:outlineProvider=“bounds”,实测过后也是不行的,直到看到有人弱弱的提了一句,硬件加速的问题!恍然大悟的感觉,因为MainActivity是公用的,所以很可能是这个问题导致的,试过之后阴影重现光明!
所以解决办法是在MainActivity中加了判断,如果是某个product,就通过代码设置开启硬件加速
if (Configuration.isXxxApp()) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
}
下面给一个设置elevation的xml示例:
<RelativeLayout
android:id="@+id/rl_user_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="125dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="10dp"
android:background="@drawable/bg_user_header_shadow"
android:elevation="5dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="112dp"
android:background="@drawable/bg_radius_5dp_white">
......
</RelativeLayout>
</RelativeLayout>
写在最后,如果你也发现明明都设置了,但是elevation就是不生效,赶紧检查一下是否关闭了硬件加速吧!