1. 程式人生 > >Android TV TextView如何實現增加滾動條

Android TV TextView如何實現增加滾動條

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
<?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>
焦點選中時是一個白色的矩形框,矩形角的弧度為4px,未選中什麼也不顯示。 然後在佈局中將其設定成背景。
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"
這樣上下移動焦點後,邏輯才能正常。 在做完如上設定後,實現的效果如下所示,
怎麼樣,還可以吧。