Android在事件传递中因gui界面设计原因,代码开发过程中难免会触及焦点冲突问题。针对该问题,介绍在自定义控件中的事件分发及焦点处理。
一.针对action_down下的事件分发
根据源码,正常super下的事件分发经历阶段包含有activity->viewgroup->view
dispatchTouchEvent事件,返回为super时是由activity----->view进行分发;
onTouchEvent事件,返回为false/super时是由view----->activity进行回溯;
对于两者而言,当返回为true时即代表自行消耗,无需再进行下一步的传递。
onInterceptTouchEvent是viewgroup的特例,默认情况下是表示不会进行拦截,因此super时viewgroup的dispatchTouchEvent事件默认实现为onInterceptTouchEvent。也可将onInterceptTouchEvent认为是分叉口,主要是导流给view进行传递dispatchTouchEvent还是viewgroup的onTouchEvent事件。
针对事件的分发,建议以图形的方式具体展示流程处理;
有价值的参考文章://www.greatytc.com/p/e99b5e8bd67b
二.焦点冲突
1.viewgroup,childview
界面上的控件一般为view,而viewgroup是用于盛放这些view的容器;
(1)View直接子类:
AnalogClock, ImageView, KeyboardView, ProgressBar, SurfaceView, TextView, ViewGroup, ViewStub
(2)View派生出的间接子类有:
AbsListView, AbsSeekBar, AbsSpinner, AbsoluteLayout, AdapterView,AdapterViewAnimator, AdapterViewFlipper, AppWidgetHostView, AutoCompleteTextView,Button,CalendarView, CheckBox, CheckedTextView, Chronometer, CompoundButton,
(3)ViewGroup派生出的直接子类有:
AbsoluteLayout, AdapterView, FragmentBreadCrumbs, FrameLayout, LinearLayout, RelativeLayout, SlidingDrawer
(4)ViewGroup派生出的间接子类有:
AbsListView,AbsSpinner, AdapterViewAnimator, AdapterViewFlipper, AppWidgetHostView, CalendarView, DatePicker, DialerFilter, ExpandableListView, Gallery, GestureOverlayView, GridView, HorizontalScrollView, ImageSwitcher, ListView,
2.Viewgroup与childview中对于焦点的处理方式有:
(1)focus_before_descendants:默认方式;viewgroup焦点处理先于childview
(2)focus_after_descendants:childview处理先于viewgroup
(3)focus_block_descendants:仅viewgroup进行处理
3.android中requestfocus之前最好先clearfocus处理
Android事件分发及焦点冲突问题
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Android 事件分发和滑动冲突都是开发中经常遇到的难点问题,遇到问题时可能会通过 Google 或者 Stac...
- 关于Android触摸事件机制 Android触摸事件机制,开发中都是老生常谈,但是惭愧的是,这么久开发,依然对A...
- 前言 Android事件分发机制是Android开发者必须了解的基础 网上有大量关于Android事件分发机制的文...
- 更多分享:http://www.cherylgood.cn 之前我们在Scroller的使用详解中,在onMeas...
- 1. 概述 作为Android开发中最常见的一个控件,个人觉得有必要谈谈了。我们刚开始接触Android的时候...