在代码中通过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); }