在android L及以上,使用button的时候,差点掉进一个坑里。

起因:

想要点击图片之后执行相应的操作,就类似于点击了按钮一样。

做法:

imageview and button

在布局文件里面定义一个FrameLayout,然后底层是Button,上面是ImageView,这两个的大小都match_parent。这样很简单就能够实现点击了图片就类似于点击了按钮一样可以执行某些操作。

问题:

在android 4.x及以下都没有问题,但是android 5.x就出问题了。问题表现为图片不显示!!!!,但该块区域能点,并且能正确执行某些操作。

只是图片不显示,这可愁死我了!::>_<::

定位问题的过程:

1.先去google以下有没有人也遇到类似的问题,发现这位同学也遇到了这个问题,而且他的博客还标注了【原创】,感觉屌屌的👍

2.还发现stackoverflow上这哥们儿也遇到。难道真是android的bug? 细想不对啊!5.x都出来这么长时间了,如果有这么个bug,难道大家不应该喜极而泣、奔走相告!? stackoverflow上有个回答,指明了方向

evelation

原来是evelation捣的鬼!

也怪我!我把button的背景设置为透明,这给定位问题造成了比较大的困难,如果button的背景是其他颜色,那么就好定位多了o(╯□╰)o

原因:

官网原话是这么说的:

Material design introduces elevation for UI elements. Elevation helps users understand the relative importance of each element and focus their attention to the task at hand

意思就是Z坐标有利于用户区分当前最重要的元素是什么。

以前所有的view是只有X和Y坐标的,但是从5.x开始他们有Z坐标了!!!Z = elevation + translationZ,并且自带evelation属性,只是不同的组件的evelation值不同罢了。

官网上的介绍

evelation2

难怪我程序里面的一些button在5.x上自带阴影了呢!😓

解决办法:

既然是evelation的问题,那么设置button为0就行了。

如果是如下图所示的,那么可以不用设置button,改为设置Linearlayout的android:elevation="100dp"

linearlayout imageview textview

参考

1.http://stackoverflow.com/questions/33937025/incorrect-framelayouts-childs-order-on-android-5-0-and-above

2.http://www.cnblogs.com/DarkMaster/p/4654953.html