FrameLayout a RelativeLayout ClassCastException incluso si no hay FrameLayout usado

En mi aplicación, tengo un diseño que tiene un RelativeLayout al que quiero establecer márgenes en tiempo de ejecución mediante programación. Pero cuando hago eso, me da ClassCastException diciendo que FrameLayout no puede FrameLayout a RelativeLayout . No tengo ningún FrameLayout utilizado, también no hay importaciones para FrameLayout . Sin embargo, el problema persiste. El xml que estoy usando es:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rl_root" android:background="@color/menu_bg" android:layout_width="wrap_content" android:layout_height="fill_parent" > <RelativeLayout android:id="@+id/ll_lhs_menu" android:layout_width="300dip" android:layout_height="fill_parent" android:background="@color/menu_bg" android:orientation="vertical"> ..... </RelativeLayout> <RelativeLayout android:id="@+id/rl_right" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentRight="true" android:background="@drawable/capture_port" android:scrollbars="none" > .... </RelativeLayout> </RelativeLayout> 

Y esta es mi onCreate donde establezco los márgenes en el diseño padre:

 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.menu); _rootLayout = (RelativeLayout) findViewById(R.id.rl_root); RelativeLayout.LayoutParams _rootLayoutParams = new RelativeLayout.LayoutParams(_rootLayout.getWidth(), _rootLayout.getHeight()); _rootLayoutParams.setMargins(300, 0, 300, 0); _rootLayout.setLayoutParams(_rootLayoutParams); } 

Y aquí está el LogCat:

  07-18 21:12:39.410: E/AndroidRuntime(7663): FATAL EXCEPTION: main 07-18 21:12:39.410: E/AndroidRuntime(7663): java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams 07-18 21:12:39.410: E/AndroidRuntime(7663): at android.widget.FrameLayout.onMeasure(FrameLayout.java:268) 07-18 21:12:39.410: E/AndroidRuntime(7663): at android.view.View.measure(View.java:10828) 07-18 21:12:39.410: E/AndroidRuntime(7663): at android.widget.LinearLayout.measureVertical(LinearLayout.java:764) 07-18 21:12:39.410: E/AndroidRuntime(7663): at android.widget.LinearLayout.onMeasure(LinearLayout.java:519) 07-18 21:12:39.410: E/AndroidRuntime(7663): at android.view.View.measure(View.java:10828) 07-18 21:12:39.410: E/AndroidRuntime(7663): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4355) 07-18 21:12:39.410: E/AndroidRuntime(7663): at android.widget.FrameLayout.onMeasure(FrameLayout.java:267) 07-18 21:12:39.410: E/AndroidRuntime(7663): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:1912) 07-18 21:12:39.410: E/AndroidRuntime(7663): at android.view.View.measure(View.java:10828) 07-18 21:12:39.410: E/AndroidRuntime(7663): at android.view.ViewRoot.performTraversals(ViewRoot.java:960) 07-18 21:12:39.410: E/AndroidRuntime(7663): at android.view.ViewRoot.handleMessage(ViewRoot.java:2062) 07-18 21:12:39.410: E/AndroidRuntime(7663): at android.os.Handler.dispatchMessage(Handler.java:99) 07-18 21:12:39.410: E/AndroidRuntime(7663): at android.os.Looper.loop(Looper.java:132) 07-18 21:12:39.410: E/AndroidRuntime(7663): at android.app.ActivityThread.main(ActivityThread.java:4128) 07-18 21:12:39.410: E/AndroidRuntime(7663): at java.lang.reflect.Method.invokeNative(Native Method) 07-18 21:12:39.410: E/AndroidRuntime(7663): at java.lang.reflect.Method.invoke(Method.java:491) 07-18 21:12:39.410: E/AndroidRuntime(7663): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 07-18 21:12:39.410: E/AndroidRuntime(7663): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 07-18 21:12:39.410: E/AndroidRuntime(7663): at dalvik.system.NativeStart.main(Native Method) 

¿A dónde me equivoco?

Intente establecer FrameLayout.LayoutParams en su lugar si RelativeLayout.LayoutParams. Cuando se configuran los params de diseño en tiempo de ejecución, hay que configurar los de su padre.

Entonces, será:

 FrameLayout.LayoutParams _rootLayoutParams = new FrameLayout.LayoutParams(_rootLayout.getWidth(), _rootLayout.getHeight()); _rootLayoutParams.setMargins(300, 0, 300, 0); _rootLayout.setLayoutParams(_rootLayoutParams); 

He tenido este error una vez antes y fue porque intenté emitir los parámetros en lugar de crear una nueva instancia. Espero que esto ayude.

Aquí :

 RelativeLayout.LayoutParams _rootLayoutParams = new RelativeLayout.LayoutParams(_rootLayout.getWidth(), _rootLayout.getHeight()); 

Debiera ser:

 RelativeLayout.LayoutParams _rootLayoutParams = new RelativeLayout.LayoutParams(_rootLayout.getLayoutParams()); 

Ahora que tiene todos los parámetros de diseño del diseño principal (raíz), puede utilizarlos para establecer los parámetros de su vista secundaria que está inflando.

 // Example usage: // viewGroup is the parent in this case whose parameters we want as a reference point. RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(viewGroup.getLayoutParams()); // Now we can add a rule stating that we want to center our new view both horizontally and vertically in the parent (viewGroup) view. params.addRule(RelativeLayout.CENTER_IN_PARENT); // Add more rules here if you would like params.addRule(newRule2); // After all of your new parameters are laid out, assign them to the view you want them applied to newView.setLayoutParams(params); // Add the view to your hierarchy and enjoy viewGroup.addView(newView); 

Sugiero que el padre de la @ id / rl_root debe ser FrameLayout que no se muestra en este xml. El tipo de LayoutParam debe ser el mismo con su propio padre no.

  • Problema con RelativeLayout cuando View visibility es View.GONE
  • Alinear el botón a la parte inferior de la pantalla
  • Layout_above no funciona correctamente con layout_alignParentBottom
  • ¿Cómo puedo evitar que mi TextView se solape?
  • ¿Por qué tengo espacio en blanco en la parte superior y en la parte inferior de mi ImageView en mi RelativeLayout?
  • ScrollView no está jugando bien con RelativeLayout
  • Alinear correctamente TextViews en RelativeLayout
  • Android RelativeLayout y childs con layout_width = "match_parent"
  • Cómo establecer la gravedad de textview programatically con RelativeLayout?
  • Cómo agregar un RelativeLayout como elemento de menú - Android
  • ¿Cómo puedo centrar dos TextViews verticalmente dentro de un Layout
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.