2010-09-29 16 views
24

Doğrusal düzeni veya başka bir pencere öğesi genişliğini veya yüksekliğini dinamik olarak değiştirmeye çalışıyorum ancak istisna atıyorum.Android'de doğrusal yayın genişliği veya yüksekliğini dinamik olarak değiştirme

<?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> 

ve My faaliyettir:

Benim düzenidir

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)); 
    } 

Fırlatma aşağıdaki istisna:

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) 

Peki nasıl dinamik boyutlarını değiştirebilirsiniz?

cevap

29

Burada sorun, mizanpaj parametrelerini ayarladığınızda, türün üst öğenin türü olması gerektiğidir, bu durumda bir FrameLayout olur. Bunu yapmak gerekir:

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

teşekkürler çok teşekkürler ....... bana çok yardımcı oluyor ama lineer geçit ebeveyni nasıl tanımlayabilirim. – Pratique

4

görevi yapmak için bu basit yol: size tam kullanmak

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); 

umut: o zaman kodunun altına kullanmak yüksekliğinde ekran boyutunu vermek ve genişlik istiyorsanız

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); 

ve başka bir yol .

İlgili konular