在代碼中通過LayoutParams動態調整子View的大小報ClassCastException錯誤

在代碼中通過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);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章