Android之自訂ListView捲軸樣式

來源:互聯網
上載者:User

使用ListView FastScroller,預設滑塊和自訂滑塊圖片的樣子:

  

 

設定快速滾動屬性很容易,只需在布局的xml檔案裡設定屬性即可:

    <ListView        android:id="@+id/listView"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:fastScrollEnabled="true"        android:focusable="true" />

 

但是有時候會發現設定屬性無效,滾動ListView並未出現滑塊。原因是該屬性生效有最小記錄限制。當ListView記錄能夠在4屏以內顯示(也就是說滾動4頁)就不會出現滑塊。可能是api設計者認為這麼少的記錄不需要快速滾動。

我的依據是android原始碼,見FastScroller的常量聲明:

// Minimum number of pages to justify showing a fast scroll thumbprivate static int MIN_PAGES = 4;

以及:

// Are there enough pages to require fast scroll? Recompute only if total count changesif (mItemCount != totalItemCount && visibleItemCount > 0) {mItemCount = totalItemCount;mLongList = mItemCount / visibleItemCount >= MIN_PAGES;}

 

通篇查看了ListView及其超累AbsListView,都未找到自訂圖片的設定介面。看來是沒打算讓開發人員更改了。但是使用者要求我們自訂這個圖片。那隻能用非常手段了。

經過分析發現,該圖片是ListView超類AbsListView的一個成員mFastScroller對象的成員 mThumbDrawable。這裡mThumbDrawable是Drawable類型的。mFastScroller是FastScroller類 型,這個類型比較麻煩,類的聲明沒有modifier,也就是default(package),只能供包內的類調用。

因此反射代碼寫的稍微麻煩一些:

try {Field f = AbsListView.class.getDeclaredField(“mFastScroller”);f.setAccessible(true);Object o=f.get(listView);f=f.getType().getDeclaredField(“mThumbDrawable”);f.setAccessible(true);Drawable drawable=(Drawable) f.get(o);drawable=getResources().getDrawable(R.drawable.icon);f.set(o,drawable);Toast.makeText(this, f.getType().getName(), 1000).show();} catch (Exception e) {throw new RuntimeException(e);}

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.