android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams

android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParamsFrameLayout的父控件是一个LinearLayout控件,问题出在,LinearLayout为子控件分配空间的时候,获取FrameLayout的LayoutParams的必须为LinearLayout.LayoutParams,而非FrameLayout.LayoutParams。     简单的举个栗子说明一下:最外层有ReLativeLayoutA,里面有两个Lin

大家好,又见面了,我是你们的朋友全栈君。

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);


而笔者是直接使用的最外层的RelativeLayout,它的外层不是RelativeLayout了,导致笔者的代码一直报错

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

所以笔者就在最外层的RelativeLayout放入了一个RelativeLayout_inside,然后再把自定义view放入RelativeLayout_inside,现在RelativeLayout_inside的外层就是RelativeLayout了,错误也就消失了。

现记录,引以为戒

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160833.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navicate premium 15 激活码【2021免费激活】「建议收藏」

    (navicate premium 15 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlMLZPB5EL5Q-eyJsaWNlbnNlSW…

    2022年3月21日
    345
  • pycharm卸载了环境变量还在怎么办_pycharm使用教程

    pycharm卸载了环境变量还在怎么办_pycharm使用教程因为之前的pycharm是社区版的,有些功能不全,所以需要重装专业版重装pycharm最大的顾虑就是之前的库能否保留以及能否删除干净1.之前的库包卸载之前找到我之前的库包所用编译器,记下路径就行注意:因为python跟pycharm是单独存在的,所以删除的pycharm并没有影响python里安装的库包2.删除正版软件删除是最简单的,找到文件所在位置,直接卸载就行这里注意两个红色箭头要全选,然后等待卸载结束就行。3.重新安装下载链接:http://www.jetbrains.com/

    2022年8月27日
    3
  • 十字路口plc交通灯程序_十字路口红绿灯plc编程实训

    十字路口plc交通灯程序_十字路口红绿灯plc编程实训知识点和关键字:定时器触点比较指令传送指令变址应用数据块控制要求示意图时序图工艺流程图当该路口是红灯时,另外一个路口是通行时间,绿灯亮和黄灯闪亮;当另外一个路口转红灯时,该路口成为通行时间,绿灯亮和黄灯闪亮。程序控制1十字路口交通灯控制程序1,使用了一个定时器来控制,该定时器在一个动作周期内,从0开始随着时间经过逐步增大一直到140,使用定时器过程值来控制红绿灯,如图…

    2022年9月10日
    0
  • windows服务创建工具srvany.exe介绍

    windows服务创建工具srvany.exe介绍srvany.exe介绍 srvany.exe是MicrosoftWindowsResourceKits工具集的一个实用的小工具,用于将任何EXE程序作为Windows服务运行。也就是说srvany只是其注册程序的服务外壳,这个特性对于我们来说非常实用,我们可以通过它让我们的程序以SYSTEM账户启动,或者实现随机器启动而自启动,也可以隐藏不必要的窗口,比如说控制台窗口等等。 

    2022年5月20日
    93
  • 双管道(CreatePipe)与本地cmd.exe进程通信(附源代码及编译好的程序,免费下载)

    双管道(CreatePipe)与本地cmd.exe进程通信(附源代码及编译好的程序,免费下载)源代码:#include<stdio.h>#include<WINDOWS.H>#defineSEND_BUFF_SIZE1024//实现去除执行结果中的”命令\n”voidprint(char*cmdstr){ while(*((char*)cmdstr++)!=’\n’); printf(cmdstr);}intmai…

    2022年7月14日
    16
  • httpd 启动报错“”Permission denied: make_sock: could not bind to address [::]:80“”

    httpd 启动报错“”Permission denied: make_sock: could not bind to address [::]:80“”

    2022年3月12日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号