时间:2021-05-21
问题描述:
android 机顶盒应用:
应用程序主界面(MainActivity)只有两个控件,一个videoview和一个button。
视频框设置无焦点,按键有焦点。
首次进入应用时焦点正常,聚焦在button上;但是当点击button跳转到下一个activity并返回时,焦点却聚焦到了videoview上,并且代码里强制设置焦点:
Button.requestFocus();
无效,现象是视频加载时,焦点是在button处,但是当视频加载完成开始播放时,整个activity失去焦点,几秒后,焦点跑到videoview上面。
原因分析:
查看了一下VideoView的源码,发现原因出在初始化上面上:
private void initVideoView() { mVideoWidth = 0; mVideoHeight = 0; getHolder().addCallback(mSHCallback); getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); setFocusable(true);//问题出在这里 setFocusableInTouchMode(true); requestFocus(); mPendingSubtitleTracks = new Vector<Pair<InputStream, MediaFormat>>(); mCurrentState = STATE_IDLE; mTargetState = STATE_IDLE; }看到这里就豁然开朗了,这就解释了为什么xml中设置了android:focusable="false"而videoview仍然能获取焦点的问题,也解释了为什么button会获得焦点而当视频加载好后被videoview抢占的问题。
解决方法:
明白了问题所在就好解决了,因为只是解决焦点问题,所以无需自定义videoview那么麻烦,只需要重写onResume()方法即可:
@Override protected void onResume() { super.onResume(); videoView.setFocusable(false); }总结:
一定要多看源码!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
istviewbutton抢占焦点的解决办法:Itemxml根节点添加android:descendantFocusability="blocksDescend
Android播放视频,包含系统自带VideoView控件,和自定义VideoView控件,可全屏播放,案例包含了本地视频和网络视频。1:自定义VideoVie
本文实例讲述了Android编程实现VideoView循环播放功能的方法。分享给大家供大家参考,具体如下:packagecom.hangcheng;import
在android开发中常见到视频播放的问题,在常规的视频中有直接用videoView+MediaController或者mediaController+serf
本节引言方法1:为抢占了控件的组件设置:android:focusable="false"方法2:item根节点设置android:descendantFocu