2010-05-03 58 views

Trả lời

6

bạn có thể đặt đó vào style.xml

<style name="Theme_app" parent="@android:style/Theme.Holo.Light"> 
    <item name="android:fastScrollThumbDrawable">@drawable/fastscroll_thumb_holo</item> 

</style> 

hơn tạo ra một xml trong drawable cho hình ảnh

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@drawable/fastscroll_thumb_pressed_holo" /> 
    <item android:drawable="@drawable/fastscroll_thumb_default_holo" /> 
</selector> 
0

Nếu bạn xem mã nguồn cho Android 2.2r1 (bản sửa đổi 1), có một lớp được gọi là android.widget.FastScroller, có phương thức useThumbDrawable().

Tôi chỉ có downloaded the source from a blog called MobileBytes chứa nó, có thể bạn có thể nhập dữ liệu đó vào dự án của mình và triển khai? (Hoặc nâng cấp API của bạn để 2.2 r1)

0

Tôi đang sử dụng nhưng tôi không biết tại sao nó không hoạt động, vì vậy tìm kiếm trên web tôi tìm thấy here một giải pháp mã cứng, tôi không biết nếu nó hoạt động trên API cũ nhưng trong trường hợp của tôi đã được giải quyết vấn đề. Lưu ý rằng tôi đang sử dụng API 18 như mục tiêu và thiết bị có API 17 để kiểm tra.

mã:

try { 
    Field f = AbsListView.class.getDeclaredField("mFastScroller"); 
    f.setAccessible(true); 
    Object o = f.get(<<your listView here>>); 
    f = f.getType().getDeclaredField("mThumbDrawable"); 
    f.setAccessible(true); 
    Drawable drawable = (Drawable) f.get(o); 
    drawable = getResources().getDrawable(R.drawable.<<your thumb drawable here can be a selector>>); 
    f.set(o, drawable); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
1

cứng mã cho kitkat android (trường "mThumbDrawable" trong FastScroller (android kitkat) không tồn tại)

try { 
      java.lang.reflect.Field f = AbsListView.class.getDeclaredField("mFastScroller"); 
      f.setAccessible(true); 
      Object o = f.get(root.findViewById(R.id.beam_contact_listview)); 
      if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
       f = f.getType().getDeclaredField("mThumbImage"); 
      } else { 
       f = f.getType().getDeclaredField("mThumbDrawable"); 
      } 
      f.setAccessible(true); 
      Drawable drawable = (Drawable) f.get(o); 
      drawable = getResources().getDrawable(R.drawable.sv_fastscroll); 
      f.set(o, drawable); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
+1

mThumbImage không phải là một Drawable trên KitKat +, nó là một ImageButton. –

+0

@JaredRummler cảm ơn sự giúp đỡ –

3

Thiết lập drawable từ phong cách là cách để đi. Tuy nhiên, nếu bạn muốn làm điều này theo lập trình ở đây là hai phương pháp hữu ích:

/** 
* Set a ListView or GridView fast scroll thumb image. 
* 
* @param listView The {@link android.widget.ListView} or {@link android.widget.GridView} 
* @param thumb The fast-scroll drawable 
* @return {@code true} if successfully set. 
*/ 
public static boolean setFastScrollThumbImage(AbsListView listView, Drawable thumb) { 
    try { 
     Field f; 
     if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
      f = AbsListView.class.getDeclaredField("mFastScroll"); 
     } else { 
      f = AbsListView.class.getDeclaredField("mFastScroller"); 
     } 
     f.setAccessible(true); 
     Object o = f.get(listView); 
     if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { 
      f = f.getType().getDeclaredField("mThumbImage"); 
      f.setAccessible(true); 
      ImageView iv = (ImageView) f.get(o); 
      iv.setImageDrawable(thumb); 
     } else { 
      f = f.getType().getDeclaredField("mThumbDrawable"); 
      f.setAccessible(true); 
      Drawable drawable = (Drawable) f.get(o); 
      drawable = thumb; 
      f.set(o, drawable); 
     } 
     return true; 
    } catch (Exception ignored) { 
    } 
    return false; 
} 

/** 
* Set a ListView or GridView fast scroll thumb color. 
* 
* @param listView The {@link android.widget.ListView} or {@link android.widget.GridView} 
* @param color The color for the fast-scroll thumb 
* @return {@code true} if successfully set. 
*/ 
public static boolean setFastScrollThumbColor(AbsListView listView, int color) { 
    try { 
     Field f; 
     if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
      f = AbsListView.class.getDeclaredField("mFastScroll"); 
     } else { 
      f = AbsListView.class.getDeclaredField("mFastScroller"); 
     } 
     f.setAccessible(true); 
     Object o = f.get(listView); 
     if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { 
      f = f.getType().getDeclaredField("mThumbImage"); 
      f.setAccessible(true); 
      ImageView iv = (ImageView) f.get(o); 
      iv.setColorFilter(color, android.graphics.PorterDuff.Mode.SRC_ATOP); 
     } else { 
      f = f.getType().getDeclaredField("mThumbDrawable"); 
      f.setAccessible(true); 
      final Drawable drawable = (Drawable) f.get(o); 
      drawable.setColorFilter(color, android.graphics.PorterDuff.Mode.SRC_ATOP); 
     } 
     return true; 
    } catch (Exception ignored) { 
    } 
    return false; 
} 
Các vấn đề liên quan