2013-08-18 10 views
12

मैं प्रोग्राम के रूप में उपयोग करते हुए निम्नलिखित एक ProgressBar केंद्रित करने के लिए कोशिश कर रहा हूँ:एकत्रित ProgressBar प्रोग्राम में एंड्रॉयड

ViewGroup layout = (ViewGroup) findViewById(android.R.id.content).getRootView(); 
progressBar = newProgressBar(SignInActivity.this,null,android.R.attr.progressBarStyleLarge); 
progressBar.setIndeterminate(true); 
progressBar.setVisibility(View.VISIBLE); 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100,100); 
params.addRule(RelativeLayout.CENTER_IN_PARENT); 
layout.addView(progressBar,params); 

आकार सेटिंग ठीक से काम करने लगता है, लेकिन ProgressBar मौजूदा लेआउट में केंद्र नहीं करता है (द्वारा परिभाषित किया गया एक रिश्तेदार लेआउट के साथ एक्सएमएल)। क्या यहां कुछ स्पष्ट रूप से गलत है?

एक्सएमएल इस प्रकार है:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".test" 
android:typeface="monospace"> 

</RelativeLayout> 

अर्थात यह सिर्फ एक खाली रिश्तेदार के साथ परीक्षण करने और अगर मैं इसे प्रोग्राम के रूप में एक प्रगति बार जोड़ने के लिए प्राप्त कर सकते हैं देखने के लिए लेआउट है।

धन्यवाद।

+0

एक्सएमएल पोस्ट करें :) –

+1

क्यों आप प्रोग्रामेटिक रूप से बनाने के लिए प्रयास करते हैं, जब आप इसे एक्सएमएल में प्राप्त कर सकते हैं? – VenomVendor

+0

मैं इसे कक्षा के रूप में बना रहा हूं क्योंकि यह एक दृश्य है जिसे मैं गतिशील रूप से इंजेक्ट करना चाहता हूं और जब आवेदन में विभिन्न प्रक्रियाएं हो रही हैं। ऐसा करने का मतलब है कि मुझे सभी लेआउट में डालना नहीं है। मैं इसे किसी ऑब्जेक्ट के रूप में तुरंत चालू कर सकता हूं और इसे वर्तमान लेआउट में जोड़ सकता हूं। –

उत्तर

30

आप इसे प्रोग्रामैटिक रूप से ऐसा करना चाहते हैं तो आप इसे नीचे की तरह कर सकते हैं:

RelativeLayout layout = new RelativeLayout(this); 
progressBar = new ProgressBar(SignInActivity.this,null,android.R.attr.progressBarStyleLarge); 
progressBar.setIndeterminate(true); 
progressBar.setVisibility(View.VISIBLE); 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100,100); 
params.addRule(RelativeLayout.CENTER_IN_PARENT); 
layout.addView(progressBar,params); 

setContentView(layout); 
+0

धन्यवाद! मैं धीरे-धीरे इस एंड्रॉइड व्यवसाय को समझना शुरू कर रहा हूं। –

+0

असल में आपके प्रभाव के साथ समस्या यह है कि आप अपने प्रोग्रेसबार में रिलेवेटिवआउट पैरामीटर का उपयोग करते हैं लेकिन बाहरी पैरेंट लेआउट बिल्कुल सापेक्ष नहीं है। CENTER_IN_PARENT को काम करने के लिए आपको प्रगति पट्टी को सापेक्ष लेआउट में रखना चाहिए। अन्यथा यह सिर्फ अनदेखा कर दिया जाएगा। – tasomaniac

+0

यह एक नए लेआउट के लिए अच्छी तरह से tasomaniac काम करता है, लेकिन अगर मैं प्रगति पट्टी xml में परिभाषित मौजूदा लेआउट में जोड़ना चाहता हूं। उपरोक्त केवल प्रगति पट्टी दिखाता है, यानी यह एक नया लेआउट है। thanx। –

8

इस शैली में अपने कोडिंग का प्रयोग करें, यह आपका इच्छित परिणाम देता है।

ViewGroup layout = (ViewGroup) findViewById(android.R.id.content).getRootView(); 

progressBar = new ProgressBar(thisActivity,null,android.R.attr.progressBarStyleLarge); 
progressBar.setIndeterminate(true); 
progressBar.setVisibility(View.VISIBLE); 

RelativeLayout.LayoutParams params = new 
     RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.MATCH_PARENT); 

RelativeLayout rl = new RelativeLayout(thisActivity); 

rl.setGravity(Gravity.CENTER); 
rl.addView(progressBar); 

layout.addView(rl,params); 
0

आपको XML की आवश्यकता नहीं है। आप कोड द्वारा सभी दृश्य बना सकते हैं:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     LinearLayout layout = new LinearLayout(this); 
     ProgressBar pb = new ProgressBar(this, null, 
             android.R.attr.progressBarStyleLarge); 
     ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(
       ViewGroup.LayoutParams.WRAP_CONTENT, 
       ViewGroup.LayoutParams.WRAP_CONTENT); 
     pb.setLayoutParams(params); 
     layout.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL); 
     layout.addView(pb); 
     setContentView(layout); 
} 
28

मैं @ के आधार पर एक वर्ग लिखा DharmarajRupakheti के answer:

public class ProgressBarHandler { 
    private ProgressBar mProgressBar; 
    private Context mContext; 

    public ProgressBarHandler(Context context) { 
     mContext = context; 

     ViewGroup layout = (ViewGroup) ((Activity) context).findViewById(android.R.id.content).getRootView(); 

     mProgressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleLarge); 
     mProgressBar.setIndeterminate(true); 

     RelativeLayout.LayoutParams params = new 
       RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); 

     RelativeLayout rl = new RelativeLayout(context); 

     rl.setGravity(Gravity.CENTER); 
     rl.addView(mProgressBar); 

     layout.addView(rl, params); 

     hide(); 
    } 

    public void show() { 
     mProgressBar.setVisibility(View.VISIBLE); 
    } 

    public void hide() { 
     mProgressBar.setVisibility(View.INVISIBLE); 
    } 
} 

उपयोग:

mProgressBarHandler = new ProgressBarHandler(this); // In onCreate 
mProgressBarHandler.show(); // To show the progress bar 
mProgressBarHandler.hide(); // To hide the progress bar 
+1

यह इस तथ्य पर विचार करने का सही तरीका होना चाहिए कि प्रगति पर टूलबार को हटा दिया गया है – Daniel

+0

उत्तर के लिए धन्यवाद, प्रोग्रेसबार को गतिशील रूप से –

+0

लागू करने का शानदार तरीका मुझे विश्वास है कि यह संदर्भ ऑब्जेक्ट को रिसाव करेगा। आप इसे एक वीक रेफरेंस बनाना चाहते हैं - या, चूंकि आप इसे पहले विधि के बाहर भी उपयोग नहीं कर रहे हैं, बस इसके संदर्भ को संग्रहीत न करें। – kpsharp

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