在代碼中通過LayoutParams動態調整子View的大小報ClassCastException錯誤
在調整下拉欄二級菜單位置的時候想使用LayoutParams動態改變二級菜單距離頂部的距離,下面是在QSDetail中首次寫的代碼
這個默認使用的是LinearLayout的LayoutParams
public class QSDetail extends LinearLayout {
private void setViewMarginTop(int y){ LayoutParams params = (LayoutParams) this.getLayoutParams(); params.topMargin = y; params.bottomMargin = y; setLayoutParams(params); }
報java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams錯誤
這個原因是因爲QSDetail是控件QSContainerImpl的子View
public class QSContainerImpl extends FrameLayout {
如果希望通過LayoutParams設置控件的位置參數的話必須使用父控件的LayoutParams,而通過以上方式得到的是QSDeatil自己的LayoutParams參數,才會觸發這個錯誤。
下面是修正之後的代碼,改爲使用FrameLayout的LayoutParams參數
private void setViewMarginTop(int y){ mFrameParams = (FrameLayout.LayoutParams)getLayoutParams(); mFrameParams.topMargin = y; setLayoutParams(params); }