2011-01-09 12 views
235

मेरे पास एक सापेक्ष लेआउट है जो मैं प्रोग्रामेटिक रूप से बना रहा हूं:सापेक्ष लेआउट में बटन के लेआउट_align_parent_right विशेषता प्रोग्रामेटिक रूप से कैसे सेट करें?

 RelativeLayout layout = new RelativeLayout(this); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, 
      LayoutParams.WRAP_CONTENT); 

अब मेरे पास दो बटन हैं जिन्हें मैं इस सापेक्ष लेआउट में जोड़ना चाहता हूं। लेकिन समस्या यह है कि एक दूसरे पर RelatiiveLayout ओवरलैपिंग के बाईं ओर दोनों बटन दिखाए जा रहे हैं।

buttonContainer.addView(btn1); 
buttonContainer.addView(btn2); 

अब मैं जानना चाहता हूं कि मैं XML के android:layout_alignParentRight="true " या android:layout_toLeftOf="@id/btn" गुणों को प्रोग्रामेटिक रूप से कैसे सेट कर सकता हूं जैसा कि हम xml में करते हैं?

उत्तर

561

आप View.getLayoutParams का उपयोग कर कोड से किसी भी LayoutParams तक पहुंच सकते हैं। आपको बस LayoutParams आपकी पहुंच के बारे में बहुत अवगत होना चाहिए। यह आमतौर पर ViewGroup युक्त चेकिंग द्वारा प्राप्त किया जाता है यदि उसके पास LayoutParams आंतरिक बच्चा है तो वह वही है जिसका उपयोग आप करना चाहिए। आपके मामले में यह RelativeLayout.LayoutParams है।

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)button.getLayoutParams(); 
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
params.addRule(RelativeLayout.LEFT_OF, R.id.id_to_be_left_of); 

button.setLayoutParams(params); //causes layout update 
+1

क्या होगा अगर एंकर के पास कोई आईडी न हो? params.addRule (RelativeLayout.LEFT_OF, R.id.id_to_be_left_of); टेक्स्ट व्यू tvUserName = नया टेक्स्ट व्यू (एक्ट); –

+13

आईडी जोड़ने के बारे में कैसे? – user2161301

+1

क्या होगा यदि 'रीसायकल व्यू' पर 'बटन' है? क्या यह एक ही विजेट में समान या विपरीत नियम जोड़ने में कोई समस्या नहीं है? –

10
  1. आप बटन के लिए बना सकते हैं और आईडी की जरूरत है , btn1.setId(1);
  2. आप लिए पैरामीटर चर का उपयोग कर सकते हैं अपने लेआउट में पैरामीटर जोड़ें मुझे लगता है कि विधि addRule() है,: आप संदर्भ की जरूरत है इस LayoutParams ऑब्जेक्ट के लिए एंड्रॉइड जावा डॉक्स से देखें।
+0

मैं कोड के किसी भी भाग अत्यधिक सराहना करेंगे: आप RelativeLayout.LayoutParams#addRule(int verb) और RelativeLayout.LayoutParams#addRule(int verb, int anchor)

का उपयोग कर आप कोड के माध्यम से इसे प्राप्त कर सकते हैं हो जाएगा। मुझे बटन में कोई विधि नहीं मिलती है। –

+0

आईडी सेट करना मदद नहीं करता है क्योंकि यह केवल एक संख्या के बजाय वास्तविक संसाधन आईडी की अपेक्षा कर रहा है क्योंकि सेट आईडी को @IdRes के साथ एनोटेट किया जा रहा है। –

+0

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

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

  • कोई संबंधित समस्या नहीं^_^