先上要做出的效果图:


问题原因和解决方案:
比如“做过的题”功能是用一个LinearLayout做的布局,里面包含ImageView和TextView,点击“做过的题”,整个LinearLayout会变色,松开颜色就再还原,这是一个非常常见的功能,但是当你的手指点在图片上也就是ImageView上时,是不会触发LinearLayout事件的。设置了ImageView的点击事件后点击图片发现它会走ImageView的方法,说明这种布局ImageView的优先级是要高于LinearLayout的;
针对这种情况有种解决办法:代码中同时设置LinearLayout和ImageView的点击事件,让它俩公用一个方法即可;
但是这样的缺点就是你要多写一个点击事件,而且点击ImageView控件虽然会执行方法但是LinearLayout的颜色是不会变的;
我们可以换一种思路:ImageView有没有一种属性可以忽略点击事件呢?答案是有的:android:clickable="false";
这个属性在其他控件也是存在的,意义就是忽略点击事件。但是,很抱歉,又有但是了。在ImageView中无论设置clickable=false还是设置focusable=false还是设置onClick=false(设置这个点击就崩溃),点击后都不会去执行LinearLayout的点击事件。万般无奈之下,我换了个控件:ImageButton,使用这个控件,将clickable="false"就实现想要的效果了。
最后贴上代码:

希望能帮到大家,顺便如果有能使用ImageView属性设置来完成此需求的可以留言给我,感激不尽。
网友评论