2011-02-15 11 views
7

पर जोड़े गए प्रोग्रेसबार की चौड़ाई बदलें, मैं कोड से यूआई बना रहा हूं और सफलतापूर्वक प्रोग्रेसबार विजेट जोड़ सकता हूं, हालांकि मैं विजेट के आयामों को मेरे इच्छित मानों में परिवर्तित नहीं कर सकता, यह हमेशा डिफ़ॉल्ट आकार में रहता है (आस-पास 50dp)। मैंने निम्नलिखित कोड की कोशिश की है;रनटाइम

ProgressBar progressBar = new ProgressBar(activity, null, android.R.attr.progressBarStyleHorizontal); 
    progressBar.setMinimumHeight(20); 
    progressBar.setMinimumWidth(100); 

मैं भी कुछ नहीं Progressbar LayoutParams की स्थापना लेकिन फिर से और मैं एक और लेआउट में विजेट लपेटकर की कोशिश की है, लेकिन अभी भी नहीं नसीब कोशिश की है।

क्या कोई मदद कर सकता है, क्योंकि मैं यह नहीं देख सकता कि इसे कैसे किया जाए? यदि एक्सएमएल का उपयोग कर कोई समाधान है तो यह काम कर सकता है, लेकिन मुझे रनटाइम पर आयाम और स्थान सेट करना होगा।


प्रगति एक्सएमएल के लिए मैंने निम्नलिखित का उपयोग किया।

<ProgressBar 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="10dp" 
     android:indeterminateOnly="false" 
     android:progressDrawable="@android:drawable/progress_horizontal" 
     android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal" 
     android:maxWidth="1000dp" 
    /> 

फिर इसे बढ़ाने के लिए कोड निम्नानुसार है। यह एक मिश्रण है जिसे हम चर्चा कर रहे हैं।

<ProgressBar 
     android:id="@+id/progress" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:indeterminate="true" 
     android:visibility="visible" 
     style="@android:style/Widget.ProgressBar.Large.Inverse" 
/> 

और फिर कोड:

LayoutInflater layoutInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    ProgressBar progressBar = (ProgressBar)layoutInflater.inflate(R.layout.progress_bar, null); 
    progressBar.setMinimumHeight(10); 
    progressBar.setMinimumWidth(200); 
    progressBar.setLayoutParams(new RelativeLayout.LayoutParams(200, 10); 

    progressBar.setMax(100); 
    progressBar.setProgress(getScrollBarValue()); 
    progressBar.setIndeterminate(isIndeterminate()); 
    progressBar.getLayoutParams().width = 200; 
    progressBar.invalidate(); 
+0

मुझे लगता है कि एक समाधान विजेट के लिए स्रोत कोड की प्रतिलिपि बनाना और गायब विधियों को लागू करना होगा। एक पागल समाधान लगता है, ऐसा करने का एक तरीका होना चाहिए। – Snowwire

+0

बस पुष्टि करने के लिए: आप बार शैलियों की तलाश कर रहे हैं, स्पिनर शैलियों नहीं? शायद यह पता लगाने के लिए पर्याप्त होगा कि शैलियों/आकृतियों को परिभाषित किया गया है और उन्हें कॉपी और समायोजित करने के लिए। – sstn

उत्तर

9

R.layout.activity यह भी शामिल है

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity); 
    ProgressBar bar = (ProgressBar)findViewById(R.id.progress); 
    bar.getLayoutParams().height = 500; 
    bar.invalidate(); 
} 

कॉल विधि अमान्य() के लिए है कि के रूप में महत्वपूर्ण है जब दृश्य है खाते में परिवर्तन लेने के लिए फिर से खींचा जाता है। हालांकि अनजान, यह परिवर्तन बैचिंग द्वारा बेहतर प्रदर्शन की अनुमति देता है।

+0

मैंने आपके द्वारा सुझाए गए तरीके की कोशिश की, लेकिन इसका आकार पर कोई प्रभाव नहीं पड़ा। – Snowwire

+0

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

+0

मुझे अभी तक अपना कोड आजमाने का मौका नहीं मिला है, लेकिन लेआउट मैं कोड में पूरी तरह से परिभाषित कर रहा हूं। तो मैं एक रिलेटिवलाउट बनाता हूं, फिर एक बाल दृश्य जोड़ें जो प्रोग्रेसबार है। setContentView तब रिलेटिवलाइट जोड़ने के लिए उपयोग किया जाता है। कोई लेआउट.एक्सएमएल – Snowwire

0

मिनविड्थ/मिनहेइट/मैक्सविड्थ/मैक्सहाइट पैरामीटर भी हैं, लेकिन (मुझे लगता है) वे केवल एक्सएमएल या स्टाइल/थीम के माध्यम से सेट किए जा सकते हैं।

अन्यथा, आप एक्सएमएल से अपने प्रोग्रेसबार दृश्य को बढ़ा सकते हैं।

+0

मैंने आपके द्वारा सुझाए गए प्रयासों की कोशिश की, और मैं विजेट की ऊंचाई को बदलने के लिए प्राप्त कर सकता था, लेकिन चौड़ाई नहीं। आकार से प्रभावी होने के लिए अधिकतम और न्यूनतम चौड़ाई गुणों को मैं जो कह सकता हूं उससे वही होना चाहिए। रनटाइम पर अधिकतम आकार की संपत्ति को बदला नहीं जा सकता है, यह खुलासा नहीं है। – Snowwire

+0

आपकी प्रगतिबार कौन सी दिशा है? प्रगति पट्टी की दिशा में आकार आमतौर पर लेआउट द्वारा निर्धारित किया जाना चाहिए। – sstn

+0

यह सच नहीं है, आप लेआउटपैरम्स –

0

तो, आप प्रगति बार के लिए अपनी खुद की शैली निर्धारित करने होंगे:

<style name="SmallProgressBar" parent="android:Widget.ProgressBar"> 
    <item name="android:minHeight">10dip</item> 
    <item name="android:maxHeight">35dip</item> 
</style> 

यहाँ, आप न्यूनतम और अधिकतम ऊंचाई प्रगति बार और अन्य शांत सुविधाओं की चौड़ाई निर्धारित कर सकते हैं।

<ProgressBar 
    android:id="@+id/custom_edit_text_progress_bar" 
    style="@style/SmallProgressBar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentTop="true" 
    android:visibility="visible"/> 

जब आप अपने प्रगति बार बढ़, आप

getLayoutParams().height = 25 

और प्रगति बार के लिए

getLayoutParams().width = 25 

और सेट ऊंचाई:

अब, आप अपने XML लेआउट शैली में सेट और चौड़ाई।

नोट: आप शैलियों में परिभाषित ऊंचाई और चौड़ाई से अधिक नहीं हो सकते हैं।