错误解决:widget.FrameLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams

错误解决:widget.FrameLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParamsandroid.widget.FrameLayout$LayoutParamscannotbecasttoandroid.widget.LinearLayout$LayoutParams。LinearLayout.LayoutParamsparams=newLinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,0);


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1 问题: 

在Android Activity中,用java代码进行LayoutParams参数设置的时候,出现如下错误:

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

2 分析:

从字面上来看,出翔了类型转换错误:

FrameLayout$LayoutParams 不能转换为LinearLayout$LayoutParams。

也就是说,不同类型的布局下的LayoutParams对象不能进行转换。而开发应验告诉我们,同一种布局下的LayoutParams才可以转换。

LayoutParams使用规则:“父Layout”为子控件分配空间的时候,获取”子Layout”的LayoutParams的必须是“父Layout”.LayoutParams,而非子Layout的LayoutParams。

3 举例:

对于下面的布局来说:

错误解决:widget.FrameLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams

//Layout 对象的声明

RelativeLayout A;

LinearLayout B;

FrameLayout C;

 

最外层是RelativeLayout A,里面有一个LinearLayout B,而B中又有一个FrameLayout 。如果要在代码里设置B的LayoutParams,B的LayoutParams要为RelativeLayout.LayoutParams。

分析:“要在代码里设置B的LayoutParams”,就要用B的父Layout的LayoutParams,即RelativeLayout A得LayoutParams,

 代码如下:

RelativeLayout.LayoutParams params = new 
    RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, 
        LayoutParams.MATCH_PARENT);
B.setLayoutParams(params);

如果要设置C的参数,则:就要用C的父Layout的LayoutParams,即LinearLayout B的LayoutParams。

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0);
    params.weight = 8;
    C.setLayoutParams(params);

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

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

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

相关推荐

  • 生活小感慨

    生活琐事开一篇文来记录生活2021/12/9阻挡我使我停滞不前的,是浮躁的心2021/8/16我也并不希望我的生活是一成不变的.2021/8/13挑战软肋2021/8/5感谢每一个编

    2021年12月13日
  • crunch使用方法_launch中文

    crunch使用方法_launch中文名字   crunch-从一个字符集中产生对应的字典简介   crunch[][选项]注:中括号里面的是可选项说明   crunch能够根据你给定的标准来产生字典。并且可以将结果输出到屏幕,文件或者其它程序。参数   最小长度      你想要让crunch产生的字符串的最小长度。这个参数即使不会用到也必须填写。   最

    2022年11月2日
  • h3c s2000交换机配置命令_华三两台交换机做dhcp

    h3c s2000交换机配置命令_华三两台交换机做dhcp
    一、 组网需求:
    Switch的端口Ethernet1/0/5与DHCP服务器端相连,端口Ethernet1/0/1,Ethernet1/0/2,Ethernet1/0/3分别与DHCPClientA、DHCPClientB、DHCPClientC相连。
    (1)在Switch上开启DHCPSnooping功能。
    (2)设置Switch上端口Ethernet1/0/5为DHCPSnooping信任端口。
    (3)在Switch

    2022年10月15日
  • 组合数的各种性质和定理

    组合数的各种性质和定理从m个物品里选出n个的方案数,记作CnmCmnC_m^n,即为组合数组合数有很多很多的性质和定理。。。注意由于本人沉迷玩梗无法自拔,如果看见您看不懂的梗请随意跳过。组合数通项公式Cnm=m!n!∗(m−n)!Cmn=m!n!∗(m−n)!C_m^n=\frac{m!}{n!*(m-n)!}证明:现在我们从m个不同的数里选出n个数组成一个排列,第一个位子上的数有m种取法,第二…

    2022年7月15日
  • JavaScript和Java的区别[通俗易懂]

    JavaScript和Java的区别[通俗易懂]  虽然JavaScript中有Java,但他们之间的关系就如同印度和印度尼西亚一样——没有什么关系。只是JavaScript中的某些语法和Java类似而已。出身不同  Java和JavaScript是由不同公司发布的不同的产品,Java是由Sun公司发布编程语言,而JavaScript是由Netscape公司发布的脚本语言。变量不同1.变量定义时的区别  定义变量时Java和JavaScript有区别。Java是强类型的语言,它要求每个变量必须在定义时明确指出这个变量是什么类型的;而JavaS

    2022年7月9日
  • 机器学习之–神经网络算法原理

    机器学习之–神经网络算法原理转自:https://blog.csdn.net/lyl771857509/article/details/78990215神经网络好了,前面花了不少篇幅来介绍激活函数中那个暗藏玄机的e,下面可

    2022年8月3日

发表回复

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

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