2010-09-29 3 views
24

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

मेरे लेआउट है:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/abc" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="ghghjkgj ghjg hjgj ghj g hjgjgh jhg " 
    /> 
</LinearLayout> 

और मेरे गतिविधि है:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     LinearLayout ll = (LinearLayout)findViewById(R.id.abc); 
     ll.setLayoutParams(new LinearLayout.LayoutParams(30,60)); 
    } 

फेंक निम्न अपवाद:

E/AndroidRuntime(16052): java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams 
E/AndroidRuntime(16052): at android.widget.FrameLayout.onLayout(FrameLayout.java:288) 
E/AndroidRuntime(16052): at android.view.View.layout(View.java:7035) 
E/AndroidRuntime(16052): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249) 
E/AndroidRuntime(16052): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125) 
E/AndroidRuntime(16052): at android.widget.LinearLayout.onLayout(LinearLayout.java:1042) 
E/AndroidRuntime(16052): at android.view.View.layout(View.java:7035) 
E/AndroidRuntime(16052): at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
E/AndroidRuntime(16052): at android.view.View.layout(View.java:7035) 
E/AndroidRuntime(16052): at android.view.ViewRoot.performTraversals(ViewRoot.java:1045) 
E/AndroidRuntime(16052): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727) 
E/AndroidRuntime(16052): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(16052): at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime(16052): at android.app.ActivityThread.main(ActivityThread.java:4627) 
E/AndroidRuntime(16052): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(16052): at java.lang.reflect.Method.invoke(Method.java:521) 
E/AndroidRuntime(16052): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
E/AndroidRuntime(16052): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
E/AndroidRuntime(16052): at dalvik.system.NativeStart.main(Native Method) 

तो मैं कैसे आयाम गतिशील रूप से परिवर्तित कर सकते हैं?

उत्तर

29

समस्या यह है कि जब आप लेआउट पैराम्स सेट करते हैं तो टाइप को माता-पिता की आवश्यकता होती है, इस मामले में यह फ़्रेमलाउट होता है। आप ऐसा करने की जरूरत:

ll.setLayoutParams(new FrameLayout.LayoutParams(30,60)); 
+0

बहुत बहुत धन्यवाद ....... यह मेरे लिए बहुत उपयोगी है लेकिन मैं लाइनरलेआउट के माता-पिता की पहचान कैसे कर सकता हूं। – Pratique

48

चेक इस - http://smartandroidians.blogspot.com/2010/04/changing-layout-height-dynamically.html

ll.getLayoutParams().height = 300; 
ll.getLayoutParams().width = 200; 
ll.requestLayout(); 

इस ईवेंट हैंडलर पर भी काम करता है।

+5

यह काम करता है, लेकिन कुछ याद रखना चाहिए कि दृश्य में माता-पिता होना चाहिए, अन्यथा getLayoutParams() शून्य – Shaegorath

+0

वापस आ जाएगा धन्यवाद अच्छा बिंदु – Tom

+0

डीपी या पीएक्स में? ... –

4

अपने काम करने के लिए यह आसान तरीका:

setContentView(R.id.main);  
Display display = getWindowManager().getDefaultDisplay(); 
LinearLayout layout= (LinearLayout) findViewById(R.id.left); 
int width=display.getWidth(); 
int height=display.getHeight(); 
LinearLayout.LayoutParams parms = new inearLayout.LayoutParams(width,height); 
layout.setLayoutParams(parms); 

आशा आप करने के लिए पूर्ण उपयोग करें: यदि आप तो नीचे दिए गए कोड का उपयोग ऊंचाई में स्क्रीन आकार देने के लिए और चौड़ाई करना चाहते

setContentView(R.id.main);  
LinearLayout layout= (LinearLayout) findViewById(R.id.left); 
int width=60; 
int height=60; 
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height); 
layout.setLayoutParams(parms); 

और एक और तरीका ।