2010-09-29 16 views
24

Estoy intentando cambiar dinámicamente el diseño lineal o cualquier otro ancho o alto de widget pero lanzando una excepción.Cambiando dinámicamente el ancho o la altura de la distribución lineal en Android

Mi diseño es:

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

y Mi actividad es:

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

Lanzar siguiente excepción:

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) 

Entonces, ¿cómo puedo cambiar las dimensiones de forma dinámica?

Respuesta

29

El problema aquí es que cuando configura los parámetros de diseño, el tipo debe ser el del elemento principal, en este caso, es un FrameLayout. Es necesario hacer esto:

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

muchas gracias ....... es muy útil para mí, pero ¿cómo puedo identificar al padre de linearlayout. – Pratique

4

Esta sencilla manera de hacer su tarea:

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

y otra manera si se quiere dar a tamaño de pantalla en altura y anchura a continuación, utilizar a continuación código:

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

esperanza usar completo a usted .

Cuestiones relacionadas