Android videoview搶占焦點的處理方法
問題描述:
android 機頂盒應(yīng)用:
應(yīng)用程序主界面(MainActivity)只有兩個控件,一個videoview和一個button。
視頻框設(shè)置無焦點,按鍵有焦點。
首次進入應(yīng)用時焦點正常,聚焦在button上;但是當點擊button跳轉(zhuǎn)到下一個activity并返回時,焦點卻聚焦到了videoview上,并且代碼里強制設(shè)置焦點:
Button.requestFocus();
無效,現(xiàn)象是視頻加載時,焦點是在button處,但是當視頻加載完成開始播放時,整個activity失去焦點,幾秒后,焦點跑到videoview上面。
原因分析:
查看了一下VideoView的源碼,發(fā)現(xiàn)原因出在初始化上面上:
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中設(shè)置了android:focusable="false"而videoview仍然能獲取焦點的問題,也解釋了為什么button會獲得焦點而當視頻加載好后被videoview搶占的問題。
解決方法:
明白了問題所在就好解決了,因為只是解決焦點問題,所以無需自定義videoview那么麻煩,只需要重寫onResume()方法即可:
@Override protected void onResume() { super.onResume(); videoView.setFocusable(false); }
總結(jié):
一定要多看源碼!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android取消EditText自動獲取焦點默認行為
- Android 設(shè)置Edittext獲取焦點并彈出軟鍵盤
- Android取消EditText自動獲取默認焦點
- 360瀏覽器文本框獲得焦點后被android軟鍵盤遮罩該怎么辦
- Android開發(fā)之滑動圖片輪播標題焦點
- Android給自定義按鍵添加廣播和通過廣播給當前焦點輸入框賦值
- Android GridView中包含EditText的焦點重新獲取方法
- Android 實現(xiàn)不依賴焦點和選中的TextView跑馬燈
- Android基于TextView不獲取焦點實現(xiàn)跑馬燈效果
- Android OnFocuChangeListener焦點事件詳解
相關(guān)文章
Android 判斷是否是是全漢字、全字母、全數(shù)字、數(shù)字和字母等(代碼)
這篇文章主要介紹了Android 判斷是否是是全漢字、全字母、全數(shù)字、數(shù)字和字母等的實例代碼,需要的朋友可以參考下2016-12-12詳解用RxJava實現(xiàn)事件總線(Event Bus)
本篇文章主要介紹了用RxJava實現(xiàn)事件總線(Event Bus),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11Android彈窗ListPopupWindow的簡單應(yīng)用詳解
這篇文章主要為大家詳細介紹了Android彈窗ListPopupWindow的簡單應(yīng)用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11