Android TV TextView如何實現增加滾動條
阿新 • • 發佈:2019-01-08
android:maxLines="3"
android:scrollbars="vertical"
其中android:maxLines="3"表示最多顯示3行資料,android:scrollbars="vertical"滾動條設定為縱向。同時,需要需修改程式碼,
TextView textView = (TextView)findViewById(R.id.tv_appDesc); textView.setMovementMethod(ScrollingMovementMethod.getInstance());
此方法的作用是給TextView增加一個滾動的方法物件,可以直接呼叫ScrollingMovementMethod的靜態方法getInstance()生成此物件。
第三步,設定焦點選中後的效果。
意思就是在焦點落在此控制元件時,增加一個選中效果,這裡根據效果圖,自己自定義了一個selector,程式碼如下所示,
textview_selector.xml焦點選中時是一個白色的矩形框,矩形角的弧度為4px,未選中什麼也不顯示。 然後在佈局中將其設定成背景。<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" > <shape android:shape="rectangle" > <stroke android:width="2px" android:color="#ffffff" /> <corners android:radius="4px"/> </shape> </item> </selector>
android:background="@drawable/textview_selector"
至此,需求的雛形已經實現。
但有些細節還需要繼續除錯,比如,預設的滾動條太暗或者隨著應用主題而改變,我們想保持不變,那可以設定滾動條的圖片。滾動條由兩部分可以設定,滾動圖片和滾動軌道。
分別對應這兩個屬性,
android:scrollbarThumbVertical和android:scrollbarTrackVertical
我用到了android:scrollbarThumbVertical屬性,重新指定了一個滾動圖片,圖片是UI提供的一個.9圖。如下所示:
android:scrollbarThumbVertical="@drawable/scrollbar"
滾動條設定完畢後,發現滾動條和文字貼的很近,於是進行了一下優化。
滾動條有這樣一個屬性android:scrollbarStyle,它可以設定4種值,4種可選值有insideOverlay、insideInset、outsideOverlay、outsideInset四種。
四種值分別表示:
insideOverlay:預設值,表示在padding區域內並且覆蓋在view上,如下所示,
insideInset:表示在padding區域內並且插入在view後面,如下所示,
outsideOverlay:表示在padding區域外並且覆蓋在view上,如下所示,
outsideInset:表示在padding區域外並且插入在view後面,如下所示,
再對比四種效果後,我最終選擇了outsideInset方式。xml中進行如下設定,
android:paddingRight="20px"
android:scrollbarStyle="outsideInset"
最後,設定完成後,需求基本實現,但是,發現在從應用介紹上面的控制元件按向下,或者下面的控制元件在按向上鍵時,有時TextView並不能獲取到焦點,於是增加了如下程式碼,
android:nextFocusDown="@+id/recycler_view"
android:nextFocusUp="@id/re_progressbar"
這裡的nextFocusDown和nextFocusUp表示當焦點離開這個控制元件時,並且按的是向下鍵時就跳轉到recycler_view控制元件,向上時跳轉到re_progressbar控制元件。
並給re_progressbar按鈕指定向下的控制元件,
android:nextFocusDown="@+id/tv_appDesc"
給recycler_view列表指定向上的控制元件,
android:nextFocusUp="@id/tv_appDesc"
這樣上下移動焦點後,邏輯才能正常。
在做完如上設定後,實現的效果如下所示,
怎麼樣,還可以吧。