2012-12-14 12 views
13

मेरी आवश्यकताएं स्क्रॉलबार के साथ दृश्यों की लंबवत सूची प्रदर्शित करने के लिए होती हैं जब भी दृश्यों की कुल ऊंचाई सूची के लिए अनुमत ऊंचाई से बड़ी होती है।स्क्रॉलबार को प्रोग्रामेटिक रूप से अनुकूलित करना

इसके अतिरिक्त, मुझे स्क्रॉलबार उपस्थिति (पृष्ठभूमि और अंगूठे) प्रोग्रामेटिक रूप से अनुकूलित करने की आवश्यकता है। (रनटाइम पर, मेरी गतिविधि प्रतिपादन करने के लिए सभी डेटा प्राप्त होगा:। बिटमैप स्क्रॉलबार पृष्ठभूमि, स्क्रॉलबार चौड़ाई और बिटमैप स्क्रॉलबार के अंगूठे के रूप में उपयोग करने के लिए के रूप में उपयोग करने के लिए)

एक ListView इस लिए एक अच्छे उम्मीदवार लगता है, सिवाय इसके कि मुझे स्क्रॉलबार को प्रोग्रामेटिक रूप से अनुकूलित करने का कोई तरीका नहीं मिल रहा है। मैंने इस प्रश्न को scrollBar in a listView...customizing it. पढ़ा है, लेकिन, यह एक थीम का उपयोग कर रहा है, और AFAIK प्रोग्रामिंग के रूप में एक नया विषय बनाना संभव नहीं है।

तो मेरे सवाल (ओं):

  1. वहाँ (एक ListView अंदर), प्रोग्राम के रूप में एक स्क्रॉलबार के स्वरूप को अनुकूलित करने के लिए एक तरीका है?

  2. [केवल तभी पहले एक का जवाब "निश्चित संभव नहीं है"] आप उन आवश्यकताओं को प्राप्त करने के लिए किसी अन्य तरीके से (और यह कर के कुछ काम कर उदाहरण)

धन्यवाद क्यों दिखाई देता है।

संपादित करें (23/12)

मैं इस छिपा वर्ग android.widget.ScrollBarDrawable पाया। समाधान बनाने के लिए एक अच्छा प्रारंभिक बिंदु हो सकता है (अभी इसकी जांच करने का कोई समय नहीं है)।

उत्तर

6

प्रोग्रामर के रूप में स्क्रॉलबार (सूची सूची में) की उपस्थिति को अनुकूलित करने का कोई तरीका है?

सचमुच, ऐसा नहीं लगता है, क्योंकि बस इसमें हेरफेर करने के लिए कोई सेटर्स नहीं हैं।

यह बोधगम्य है आप अपने खुद के BenView कि BenScrollBarDrawable कि गतिशील परिवर्तन हैंडल के साथ छिपा ScrollBarDrawable की जगह View के उपवर्ग बना सकते हैं कि। लेकिन फिर आपको BenViewGroup, BenAbsListView, और BenListView बनाने की आवश्यकता होगी, जो उनके व्यवहार को प्राप्त करने के लिए BenView तक श्रृंखला बनाने के लिए अपने बेन-कम समकक्षों के स्रोत कोड को क्लोन कर रहे हैं। और, ViewGroup में से एक, AbsListView, या ListView किसी भी एंड्रॉइड रिलीज में बदलने के लिए बाध्य है, आपको वास्तव में इन कक्षाओं की एन प्रतियों की आवश्यकता होगी और रनटाइम पर API स्तर के आधार पर सही प्रतिलिपि चुननी होगी।और फिर आपका ऐप अभी भी कुछ उपकरणों पर अजीब व्यवहार कर सकता है जहां निर्माता ViewGroup, AbsListView, या ListView के साथ टिंकर हो गया, और आप उनका कोड उपयोग नहीं करेंगे।

मुझे संदेह है कि यह इसके लायक है, खासकर जब स्क्रोलिंग को छोड़कर स्क्रॉलबार डिफ़ॉल्ट रूप से दिखाई नहीं दे रहे हैं।

आप उन आवश्यकताओं को प्राप्त करने के लिए किसी अन्य तरीके से (और यह कर के कुछ काम कर उदाहरण)

अपने खुद के स्पर्श इवेंट संभाल अपनी खुद की स्क्रॉल करते हैं और अपने खुद के स्क्रॉलबार सामान करने के लिए देखते हैं। चाहे उपरोक्त समाधान की तुलना में यह कम काम है बहस के लिए है।

0

बस android:scrollbarThumbVertical="@drawable/scrollbar_vertical_thumb" बदलें और अपनी आवश्यकता के अनुसार एक ड्रायबल बनाएं।

तरह
<ListView android:scrollbarThumbVertical="@drawable/scrollbar_vertical_thumb" /> 

Drawable में:

<shape xmlns:android="http://schemas.android.com/apk/res/android" > 
    <gradient android:angle="0" android:endColor="#6699FF" android:startColor="#3333FF" /> 
    <corners android:radius="1dp" /> 
    <size android:width="1dp" /> 
</shape> 

मुझे लगता है कि यह तुम क्या चाहते है!

+0

क्षमा करें, लेकिन मुझे लगता है कि आपको प्रश्न समझ में नहीं आया: मुझे इसे स्थिर xml के साथ प्रोग्रामेटिक रूप से करने की आवश्यकता नहीं है। – ben75

-1

आप इसे प्राप्त करने के लिए jquery प्लगइन (jquery.nicescroll.js) का उपयोग कर सकते हैं। अधिक जानकारी http://areaaperta.com/nicescroll/

+0

क्षमा करें, ब्राउज़र समाधान की तलाश नहीं कर रहे – ben75

2

मैं सिर्फ RecyclerView के लिए एक ही समस्या का सामना करना पड़ा है और इस

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.PorterDuff; 
import android.graphics.drawable.Drawable; 
import android.support.annotation.ColorInt; 
import android.support.v7.widget.RecyclerView; 
import android.util.AttributeSet; 

/** 
* Created on 22.3.2016. 
* 
* @author Bojan Kseneman 
* @description A recycler view that will draw the scroll bar with a different color 
*/ 
public class CustomScrollBarRecyclerView extends RecyclerView { 

    private int scrollBarColor = Color.RED; 

    public CustomScrollBarRecyclerView(Context context) { 
     super(context); 
    } 

    public CustomScrollBarRecyclerView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomScrollBarRecyclerView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public void setScrollBarColor(@ColorInt int scrollBarColor) { 
     this.scrollBarColor = scrollBarColor; 
    } 

    /** 
    * Called by Android {@link android.view.View#onDrawScrollBars(Canvas)} 
    **/ 
    protected void onDrawHorizontalScrollBar(Canvas canvas, Drawable scrollBar, int l, int t, int r, int b) { 
     scrollBar.setColorFilter(scrollBarColor, PorterDuff.Mode.SRC_ATOP); 
     scrollBar.setBounds(l, t, r, b); 
     scrollBar.draw(canvas); 
    } 

    /** 
    * Called by Android {@link android.view.View#onDrawScrollBars(Canvas)} 
    **/ 
    protected void onDrawVerticalScrollBar(Canvas canvas, Drawable scrollBar, int l, int t, int r, int b) { 
     scrollBar.setColorFilter(scrollBarColor, PorterDuff.Mode.SRC_ATOP); 
     scrollBar.setBounds(l, t, r, b); 
     scrollBar.draw(canvas); 
    } 
} 

इन विधियों देखें कक्षा में परिभाषित कर रहे हैं की तरह इसे हल पर जाते हैं, तो एक ही princible scrollview और ListView जैसे अन्य विचारों का काम करना चाहिए ।

+0

यह स्क्रॉल को match_parent पर खींच रहा है। –

+0

आपका मतलब है कि स्क्रॉलबार उतना चौड़ा है जितना कि यह माता-पिता है या क्या? –