写点什么

为什么都是 ViewGroup 的 LayoutParams,也会报 cannot be cast to android.view.ViewGroup$MarginLayoutParams?

作者:程思扬
  • 2022 年 1 月 07 日
  • 本文字数:612 字

    阅读完需:约 2 分钟

为什么都是ViewGroup的LayoutParams,也会报cannot be cast to android.view.ViewGroup$MarginLayoutParams?

今天是周六,分享一首许哲佩一起摇摆吧,一起享受在这华丽的声音和梦幻的歌词里吧


同时分享一张在上海拍的照片


正文

今天在代码里要动态改变 SurfaceView 的尺寸时,因为父布局是 FrameLayout ,自然就使用了 如下写法


val layoutParams = FrameLayout!!.layoutParams      layoutParams.height = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, height, resources.displayMetrics).toInt()      layoutParams.width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, width, resources.displayMetrics).toInt()
SurfaceView!!.layoutParams = layoutParams
复制代码


最后运行的时候 , 没想到这样写居然会报错了????<font color=#FF0000 size=5>java.lang.ClassCastException: android.view.ViewGroupMarginLayoutParams</font>


异常说的是两个是不同类型的 LayoutParams ,但明明都是 ViewGroup 的 LayoutParams 呀,而且 log 上没有标明位置,实际是为什么呢


其实就是不去新建一个 LayoutParams,而是从原来的 View 中直接获取 LayoutParams。



val layoutParams = FrameLayout!!.layoutParams
改为val layoutParams = recordUVCView!!.layoutParams
复制代码


改完运行结果没有出现异常了。


因为,当一个 View 已经有了 LayoutParams,是不能再次添加一个新创建的 LayoutParams 的,如果这样操作就会报这样的错。一个小小的坑,希望大家看到后可以避免。祝大家周末愉快

发布于: 刚刚阅读数: 3
用户头像

程思扬

关注

会的越多,不会的越多 2022.01.03 加入

还未添加个人简介

评论

发布
暂无评论
为什么都是ViewGroup的LayoutParams,也会报cannot be cast to android.view.ViewGroup$MarginLayoutParams?