2013-03-15 10 views
14

हाय मैं LinearLayoutसापेक्ष लेआउट चौड़ाई और ऊंचाई गतिशील

अंदर
<TableLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 
    </TableRow> 

    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/tv1" 
      android:layout_height="wrap_content" 
      android:gravity="left" 
      android:paddingLeft="10dp" 
      android:textColor="#000" /> 

     <TextView 
      android:id="@+id/tv2" 
      android:layout_height="wrap_content" 
      android:layout_weight="1.0" 
      android:gravity="right" 
      android:paddingRight="10dp" 
      android:textColor="#000" /> 
    </TableRow> 
</TableLayout> 

<ImageView 
    android:id="@+id/img1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" /> 

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="320px" 
    android:layout_height="320px" 
    android:gravity="center" > 
</RelativeLayout> 

निम्नलिखित लेआउट संरचना का उपयोग कर रहा हूँ और रिश्तेदार लेआउट चौड़ाई और ऊंचाई xml फ़ाइल में 320px करने के लिए यह निर्धारित करने के बजाय जावा फ़ाइल से गतिशील रूप से सेट करना चाहते हैं बदले लेकिन ऐसा करने में सक्षम नहीं है, अभिविन्यास परिवर्तन एक मुद्दा नहीं है क्योंकि मैं इसे केवल पोर्ट्रेट मोड में प्रतिबंधित करता हूं। यह संभव है match_parent का उपयोग करके पूर्ण स्क्रीन पर रिश्तेदार लेआउट स्थापित करने के लिए, लेकिन मैं स्क्रीन पर एक और विचारों डाल करने के लिए है, तो यह संभव है या मैं इसे दूसरे तरीके से प्राप्त करने के लिए है ...

+0

गतिशील लेआउट चौड़ाई सेट करने के लिए आप एक वर्ग आपके द्वारा बनाए गए से RelativeLayout वर्ग का विस्तार करने और onMeasure विधि ओवरराइड – Neil

+0

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

+0

कृपया अपवाद और कोड जहां यह इंगित करता है – Neil

उत्तर

22

एंड्रॉयड लेआउट ताज़ा नहीं करता एक बार यह प्रदर्शित होने के बाद wrap_content के साथ विचारों का। invalidate() या requestLayout() के साथ भी। तो यदि आप बच्चे के दृश्य को जोड़ते हैं, या गतिशील रूप से सामग्री को संशोधित करते हैं, तो आप खराब हो जाते हैं।

getLayoutParams().height = x प्लस requestLayout() यदि आप "एक्स" जानते हैं तो एक अच्छा समाधान है, और यदि आपको इसे केवल एक बार करना है। उसके बाद LayoutParams में खो गया है, क्योंकि आपने इसे ओवरराइड कर दिया है।

इसे हल करने के लिए, मैंने एक स्थिर वर्ग लिखा है जो wrap_content के साथ विचारों के लिए लेआउट के अपडेट को आकार देता है और बल देता है। कोड और उपयोग करने के निर्देश यहां उपलब्ध हैं:

https://github.com/ea167/android-layout-wrap-content-updater

का आनंद लें!

+0

अरे एरिक, क्या आपके पास अपने कोड के लिए उपयोग उदाहरण है? मैं आपकी कक्षा से विधियों तक पहुंच नहीं पा रहा हूं ?! – patrics

+0

आपने उस वर्ग के साथ अपने जीवन को प्रभावी रूप से बचाया। बहुत बहुत धन्यवाद। – Namnodorel

+0

आपका स्वागत है @ नमनोडोरेल! खुशी हुई यह मदद की :) – Eric

13

कोशिश इस

getLayoutParams().height= x; 
requestLayout(); or invalidate(); 
का उपयोग कर
2

कोड यू डिवाइस ऊंचाई और चौड़ाई प्राप्त कर सकते हैं नीचे से: -

Display display = getWindowManager().getDefaultDisplay(); 
    int width = (display.getWidth()); 
    int height = (display.getHeight()); 

realative लेआउट उर paramsTop: -

अब यू ऊंचाई सेट या चौड़ाई आप क्या चाहते हैं कर सकते हैं।

 paramsTop = new RelativeLayout.LayoutParams(width, height); 
+0

यह कोड बहिष्कृत है। गैर-बहिष्कृत कोड के लिए कृपया निम्नलिखित थ्रेड देखें: http://stackoverflow.com/questions/4743116/get-screen-width-and-height – Simon

2

आप विचारों आयाम गतिशील LayoutParams का उपयोग कर सेट कर सकते हैं। कुछ इस तरह:

RelativeLayout layout = (RelativeLayout) findViewById(R.id.yourlayout_id); 
// Gets the layout params that will allow you to resize the layout 
LayoutParams params = layout.getLayoutParams(); 
params.height = 320; 
params.width = 320; 
5

.xml में अपने रिश्तेदार लेआउट के लिए एक आईडी दे:

android:id="@+id/relativelayout" 

अब अपनी जावा फ़ाइल में इस बारे में:

RelativeLayout Rl = (RelativeLayout) findViewById(R.id.relativelayout); 

RelativeLayout.LayoutParams layout_description = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT or YourUserDefinedwidth, 
         RelativeLayout.LayoutParams.FILL_PARENT or YourUserDefinedHeight); 

Rl.setLayoutParams(layout_description); 
2

मैं इस

RelativeLayout relMain = (RelativeLayout) convertView.findViewById(R.id.relMain); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    params.width =200; 
params.height =200; 
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
     relMain.setLayoutParams(params); 
+0

यह मेरे लिए काम कर रहा है :) –

0

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

RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.yourId); 
relativeLayout.getLayoutParams().height = 100; 
relativeLayout.getLayoutParams().width = 100; 
संबंधित मुद्दे