java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.widg

傲慢的上校發表於2013-09-23

         有時候需要在在程式碼中設定LayoutParams,自己為一個FrameLayout設定LayoutParams的時候,遇上如題問題,

java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams

FrameLayout的父控制元件是一個LinearLayout控制元件,問題出在,LinearLayout為子控制元件分配空間的時候,獲取FrameLayout的LayoutParams的必須為LinearLayout.LayoutParams,而非FrameLayout.LayoutParams。

          簡單的舉個例子說明一下:最外層有ReLativeLayout A,裡面有兩個LinearLayout B、C,而B中又有一個一個FrameLayout D。如果要在程式碼裡設定B的LayoutParams,B的LayoutParams要為RelativeLayout.LayoutParams。

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
		B.setLayoutParams(params);

         而D要設定的話,需要:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0);
		params.weight = 8;
		D.setLayoutParams(params);

這樣問題即可解決。還是自己有些基礎知識不牢固,寫到此。

相關文章