点击事件透布局层的问题总结:
1. Hirerachy Viewer :
Api 16及之上: 用eclipse 的Hirerachy viewer直接查看
Api 16之下 :运行android sdk 下的Hirerachy Viewer脚本。(例如:D:\Program Files\adt-bundle-windows\sdk\tools\hierarchyviewer.bat)
原因: adt版本
2. View.GONE
View.GONE : 不显示并不分配相关space
View.INVISIABLE : 不显示并分配相关space
=> 但是透过Hirerachy Viewer看到的结果是:
父view是一个frameLayout,处于另个FrameLayout中,向下靠齐。子view是一个TextView。
1) 当父view和子view大小固定时:
Api 16及之上,用eclipse的Hirerachy viewer直接查看,结果:View.INVISIABLE、View.GONE时,看不到相关view的信息。
Api 16之下,结果是:View.GONE和View.INVISIABLE下,都能看到view的相关属性
=> 注意到父view的大小都未发生变化。
2) 当父view不固定大小时:
同上,注意到父view的大小都未发生变化。
3) 当父view和子view大小都不固定时:
同上,注意到父view的大小都未发生变化。
4) 要去重绘,置父view为invalidate().
同上,注意到父view的大小都未发生变化。
3. android:clickable
1) view是否获取当前的点击事件是有android:clickable属性决定的。
如果一个Layout设置了android:clickable=“true"的属性,那么该Layout将拦截所有子View未处理的点击事件,不再让其向下传递。
如果一个Layout设置了setOnClickLisener, 它也会接受并拦截所有子view未处理的点击事件。
2) 最上层view不处理的事件,应该往下传吗??
是应该向下传递的,
3) 事件在Activiity的传递过程是?
我的理解:点击或物理事件传递到Window, 然后再传递到最上层view, 然后向下层view传递,直到有一个view有接受该onClick事件。
上层view未处理,但是有监听(android:clickable=“true"),下层view也不会再收到。
上层view的属性设置为(android:clickable=“false"或不设置监听(TockLisener和ClickLisener)), 该事件就会向下传递。