2011-01-31 16 views
16

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

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ScrollView sv = new ScrollView(this); 
    RelativeLayout ll = new RelativeLayout(this); 
    ll.setId(99); 
    sv.addView(ll); 
    TextView tv = new TextView(this); 
    tv.setText("txt1"); 
    tv.setId(1); 
    TextView tv2 = new TextView(this); 
    tv2.setText("txt2"); 
    tv2.setId(2); 
    RelativeLayout.LayoutParams lay = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    lay.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
    ll.addView(tv, lay); 
    RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    p.addRule(RelativeLayout.ALIGN_BOTTOM, tv.getId()); 
    ll.addView(tv2, p); this.setContentView(sv);}; 

उत्तर

20
p.addRule(RelativeLayout.ALIGN_BOTTOM, tv.getId()); 

इस लाइन का मतलब है कि नीचे टीवी 2 के टीवी के नीचे गठबंधन किया गया है- दूसरे शब्दों में, वे एक दूसरे को कवर करेंगे। संपत्ति जो आप चाहते हैं वह संभवतः RelativeLayout.BELOW है। हालांकि, मैं इसके बजाय xml का उपयोग करने की दृढ़ता से अनुशंसा करता हूं।

+1

धन्यवाद, यह वास्तव में RelativeLayout.Below था, लेकिन काफी करीब है। एक्सएमएल करने में समस्या अंतत: यह बाहरी डेटाबेस से पॉप्युलेट हो जाएगी। – user597436

2

आप विभिन्न चीजें खो रहे हैं, पहले स्क्रॉलव्यू के पास कोई उपाय नहीं है, इसे लेआउट पैराम्स.फिल_PARENT या WRAP_CONTENT के साथ सेट करें, दूसरा; यह टेक्स्ट व्यू 1 को खोला गया है इसलिए TextView2, s lay.addRule (RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE) के साथ et TextView1 स्थिति;

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ScrollView sv = new ScrollView(this); 
    RelativeLayout ll = new RelativeLayout(this); 
    ll.setId(99); 

    sv.addView(ll, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

    TextView tv = new TextView(this); 
    tv.setText("txt1"); 
    tv.setId(1); 

    TextView tv2 = new TextView(this); 
    tv2.setText("txt2"); 
    tv2.setId(2); 
    RelativeLayout.LayoutParams lay = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    lay.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 
    ll.addView(tv, lay); 
    RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    p.addRule(RelativeLayout.ALIGN_BOTTOM, tv.getId()); 
    ll.addView(tv2, p); 
this.setContentView(sv);}; 
+0

यहां एक त्रुटि है, लाइन p.addRule (RelativeLayout.ALIGN_BOTTOM, tv.getId()); @ क्रिस्टियन की तरह होना चाहिए: पी। मैडरुल (रिलेटिव लेआउट। बेलो, tv.getId()); – Franco

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