androidtv開發
❶ 做Android TV開發,需要用到一個功能,在界面上按 上,右,右三個鍵,開啟大招(啟動另一個a
重新onKeyDown方法。
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER||keyCode == KeyEvent.KEYCODE_ENTER) {
攔截中間鍵按下
}
keyCode == KeyEvent.KEYCODE_DPAD_UP
攔截上鍵按下
keyCode == KeyEvent.KEYCODE_DPAD_DOWN
攔截下鍵按下
keyCode == KeyEvent.KEYCODE_DPAD_LEFT
攔截左鍵按下
keyCode == KeyEvent.KEYCODE_DPAD_RIGHT
攔截右鍵按下
keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0
攔截返回鍵按下
當按下 上下兩鍵時彈出一個popwindow來展示選集,這時彈出來的popwindwo沒有焦點,所以在創建popwindow時就要給它設置獲得焦 點 mSelectionsWindow.setFocusable(true);這樣popwindow里的不管listview還是gridview都能用遙控器上下左右鍵控制了。
可是這時返回鍵失效了,不能退出了,因為焦點都在popwindow上了,給popwindow設置setBackgroundDrawable這樣點擊返回鍵時popwindow就會消失掉。
如果想讓popwindow過個幾秒鍾自己消失,還要重新onKeyUp 撲捉按鍵抬起,在按鍵抬起時給handler發消息就能實現了。
❷ Android TV開發中怎麼設置全局焦點框
=L= LZ您好 那個dsoid我也有下 LZ您說的開發者選項里只有強制GPU渲染是沒什麼提高性能的選項的 除了那個運行模式 lz勾上性能模式的話 就是四核最高頻率鎖死運行了 還有LZ模擬器吃的是GPU。。。。比如07年代配置的電腦PC端NDS模擬器都有點吃不動 別說現在移動領域GPU的性能了 還有其實LZ那個模擬器幀數問題是兩方面 一就是我們面臨的 機器本身性能問題 二是模擬器開發者優化問題(其實這個是主要)LZ我建議你洗洗睡吧 現在ndsl也不貴啊 1000不到。。。。
❸ Android TV 焦點原理源碼解析
相信很多剛接觸AndroidTV開發的開發者,都會被各種焦點問題給折磨的不行。不管是學技術還是學習其他知識,都要學習和理解其中原理,碰到問題我們才能得心應手。下面就來探一探Android的焦點分發的過程。
Android焦點事件的分發是從ViewRootImpl的processKeyEvent開始的,源碼如下:
源碼比較長,下面我就慢慢來講解一下具體的每一個細節。
dispatchKeyEvent方法返回true代表焦點事件被消費了。
ViewGroup的dispatchKeyEvent()方法的源碼如下:
(2)ViewGroup的dispatchKeyEvent執行流程
(3)下面再來瞧瞧view的dispatchKeyEvent方法的具體的執行過程
驚奇的發現執行了onKeyListener中的onKey方法,如果onKey方法返回true,那麼dispatchKeyEvent方法也會返回true
可以得出結論:如果想要修改ViewGroup焦點事件的分發,可以這么干:
注意:實際開發中,理論上所有焦點問題都可以通過給dispatchKeyEvent方法增加監聽來來攔截來控制。
(1)dispatchKeyEvent方法返回false後,先得到按鍵的方向direction值,這個值是一個int類型參數。這個direction值是後面來進行焦點查找的。
(2)接著會調用DecorView的findFocus()方法一層一層往下查找已經獲取焦點的子View。
ViewGroup的findFocus方法如下:
View的findFocus方法
說明:判斷view是否獲取焦點的isFocused()方法, (mPrivateFlags & PFLAG_FOCUSED) != 0 和view 的isFocused()方法是一致的。
其中isFocused()方法的作用是判斷view是否已經獲取焦點,如果viewGroup已經獲取到了焦點,那麼返回本身即可,否則通過mFocused的findFocus()方法來找焦點。mFocused其實就是ViewGroup中獲取焦點的子view,如果mView不是ViewGourp的話,findFocus其實就是判斷本身是否已經獲取焦點,如果已經獲取焦點了,返回本身。
(3)回到processKeyEvent方法中,如果findFocus方法返回的mFocused不為空,說明找到了當前獲取焦點的view(mFocused),接著focusSearch會把direction(遙控器按鍵按下的方向)作為參數,找到特定方向下一個將要獲取焦點的view,最後如果該view不為空,那麼就讓該view獲取焦點。
(4)focusSearch方法的具體實現。
focusSearch方法的源碼如下:
可以看出focusSearch其實是一層一層地網上調用父View的focusSearch方法,直到當前view是根布局(isRootNamespace()方法),通過注釋可以知道focusSearch最終會調用DecorView的focusSearch方法。而DecorView的focusSearch方法找到的焦點view是通過FocusFinder來找到的。
(5)FocusFinder是什麼?
它其實是一個實現 根據給定的按鍵方向,通過當前的獲取焦點的View,查找下一個獲取焦點的view這樣演算法的類。焦點沒有被攔截的情況下,Android框架焦點的查找最終都是通過FocusFinder類來實現的。
(6)FocusFinder是如何通過findNextFocus方法尋找焦點的。
下面就來看看FocusFinder類是如何通過findNextFocus來找焦點的。一層一層往下看,後面會執行findNextUserSpecifiedFocus()方法,這個方法會執行focused(即當前獲取焦點的View)的findUserSetNextFocus方法,如果該方法返回的View不為空,且isFocusable = true && isInTouchMode() = true的話,FocusFinder找到的焦點就是findNextUserSpecifiedFocus()返回的View。
(7)findNextFocus會優先根據XML里設置的下一個將獲取焦點的View ID值來尋找將要獲取焦點的View。
看看View的findUserSetNextFocus方法內部都幹了些什麼,OMG不就是通過我們xml布局裡設置的nextFocusLeft,nextFocusRight的viewId來找焦點嗎,如果按下Left鍵,那麼便會通過nextFocusLeft值里的View Id值去找下一個獲取焦點的View。
可以得出以下結論:
1. 如果一個View在XML布局中設置了focusable = true && isInTouchMode = true,那麼這個View會優先獲取焦點。
2. 通過設置nextFocusLeft,nextFocusRight,nextFocusUp,nextFocusDown值可以控制View的下一個焦點。
Android焦點的原理實現就這些。總結一下:
為了方便同志們學習,我這做了張導圖,方便大家理解~
❹ Android TV(一)(入門准備)
以下內容是對Google Android TV文檔的翻譯,可能存在錯誤,請讀者以官方文檔為准
官方地址
在文檔中Google對Android TV的提出了許多要求,如果你只是使用它的一些UI元素,你可以不用太注意這些要求。
官方地址 鏡像地址
TV應用在手機和平板電腦上使用相同的項目結構。這意味著你可以修改已經存在的應用使其在電視設備上運行或者在你已知的Android知識上創建新的應用。這部分內容主要是准備開發環境和開發TV應用的一些最低要求。(開發TV應用和手機應用本質是一致的,下面的一些要求只是你要使用到一些Google的庫(Leanback support)或者要將應用在GooglePlay上線,否則,要求不必遵守)
Supported Media Formats
DRM
android.drm
ExoPlayer
android.media.MediaPlayer
這一部分主要關於如何修改一個已存在的Android項目或者創建一個新的項目。
下面是讓app在電視設備上運行的主要部分:
1.Activity for TV,在manifest中聲明一個activity。
2.TV Support Libraries
1.SDK tools version 24.0.0 或者更高
2.SDK with android5.0 或者更高
3.創建或更新項目(如果你要修改已存在的Android項目應該是該項目的target為5.0或者更高)
可以兼容到API17
如果一個應用打算運行在電視設備上它必須在manifest文件中聲明一個TV activity。如下:
如果設置required屬性為true,你的APP在設備上將只運行leanback ui。
運行在TV設備上的應用不需要通過觸摸屏幕來輸入。
v17 leanback library 為電視應用程序提供用戶界面部件,特別是用於媒體播放的應用程序。
v7 recyclerview library
v7 cardview library
在完成上述步驟之後,是時候開始為大屏幕構建應用程序了!檢查這些額外的主題,以幫助您建立您的應用程序的電視:
構建電視播放應用
幫助用戶搜索內容
Building TV Games
Building TV Channels