2012-03-15 31 views
11

मैं जानता हूँ कि सूचीदृश्य इस Android:scrollbarThumbVertical आदिएंड्रॉइड में प्रोग्रामेटिक रूप से स्क्रॉलबार थंब सेट कैसे करें?

तरह एक्सएमएल में स्क्रॉलबार अंगूठे सेट कर सकते हैं लेकिन मैं जावा कोड में सूचीदृश्य उदाहरण बना रहा हूं और मैं शायद अलग स्क्रॉलबार अंगूठे सेट करना होगा। क्या कोई तरीका स्क्रॉलबार अंगूठे प्रोग्रामेटिक रूप से सेट कर सकता है?

उत्तर

2

मुझे इसका जवाब नहीं पता था, लेकिन थोड़ा खोदने के बाद मुझे नहीं लगता कि यह परेशानी के बिना संभव है।

यह XML विशेषता वास्तव में एक View, नहीं एक ListView साथ जुड़ा हुआ है - एंड्रॉयड स्रोत कोड देखें में, ऐसा लगता है कि केवल जगह है कि यह ऊर्ध्वाधर अंगूठे drawable स्थापित कर रही है 'initializeScrollbars' तरीका है। अब यह विधि निजी नहीं है, इसलिए हम इस विधि को देखने और ओवरराइड करने के किसी भी बच्चे को बढ़ा सकते हैं, लेकिन मुद्दा यह है कि अंगूठे को खींचने के लिए आवश्यक एक महत्वपूर्ण घटक, स्क्रॉलिबिलिटी कैश, बिना किसी गेटर विधियों के निजी है।

तो बहुत सारे कोड को दोबारा लिखने के बिना मुझे नहीं लगता कि ऐसा करने का कोई आसान तरीका है - क्षमा करें!

+0

आपके लिए धन्यवाद जांच :) – dreamtale

21

आप प्राप्त कर सकते हैं कि प्रतिबिंब के माध्यम से:

try 
{ 
    Field mScrollCacheField = View.class.getDeclaredField("mScrollCache"); 
    mScrollCacheField.setAccessible(true); 
    Object mScrollCache = mScrollCacheField.get(listview); 
    Field scrollBarField = mScrollCache.getClass().getDeclaredField("scrollBar"); 
    scrollBarField.setAccessible(true); 
    Object scrollBar = scrollBarField.get(mScrollCache); 
    Method method = scrollBar.getClass().getDeclaredMethod("setVerticalThumbDrawable", Drawable.class); 
    method.setAccessible(true); 
    method.invoke(scrollBar, getResources().getDrawable(R.drawable.scrollbar_style)); 
} 
catch(Exception e) 
{ 
    e.printStackTrace(); 
} 

ऊपर कोड निष्पादित करता है के रूप में:

listview.mScrollCache.scrollBar.setVerticalThumbDrawable(getResources().getDrawable(R.drawable.scrollbar_style)); 
+5

यह स्वीकार्य उत्तर होना चाहिए। – Dogcat

+1

नमस्ते, समाधान के ऊपर @ Eng.Fouad recyclerview..even /*listview.mScrollCache.scrollBar.setVerticalThumbDrawable(getResources().getDrawable(R.drawable.scrollbar_style))*/ यह पंक्ति सूचीदृश्य के साथ काम नहीं कर रही है या समाधान से ऊपर नहीं है। recyclerview। –

1

मैं इसे एक विधि 100% प्रोग्राम के रूप में

public static void ChangeColorScrollBar(View Scroll, int Color, Context cxt){ 

    try 
    { 
     Field mScrollCacheField = View.class.getDeclaredField("mScrollCache"); 
     mScrollCacheField.setAccessible(true); 
     Object mScrollCache = mScrollCacheField.get(Scroll); 
     Field scrollBarField = mScrollCache.getClass().getDeclaredField("scrollBar"); 
     scrollBarField.setAccessible(true); 
     Object scrollBar = scrollBarField.get(mScrollCache); 
     Method method = scrollBar.getClass().getDeclaredMethod("setVerticalThumbDrawable", Drawable.class); 
     method.setAccessible(true); 

     Drawable[] layers = new Drawable[1]; 
     ShapeDrawable sd1 = new ShapeDrawable(new RectShape()); 
     sd1.getPaint().setColor(cxt.getResources().getColor(Color)); 
     sd1.setIntrinsicWidth(Math.round(cxt.getResources().getDimension(R.dimen.dp_3))); 
     layers[0] = sd1; 

     method.invoke(scrollBar, layers); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 

बनाने के लिए इस सवाल का जवाब संशोधित }

संबंधित मुद्दे