错误解决: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);

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java定义一个数组并初始化_java中什么是数组

    java定义一个数组并初始化_java中什么是数组介绍学习Java的朋友想必对数组并不陌生,它需要使用之前对其进行初始化,这是因为数组是引用类型,声明数组只是声明一个引用类型的变量,并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中就可使用该数组变量来访问数组元素。所谓数组初始化就是让数组名指向数组对象的过程,该过程主要分为两个步骤,一是对数组对象进行初始化,即为数组中的元素分配内存空间和赋值,二是对数组名进行初始化,即为数组名赋值为数…

  • C++ 中的getline()函数用法详解

    C++ 中的getline()函数用法详解    遇到了要输入一行字符串的操作,我想除了fgets()的方法(fgets()用法链接),getline()也是可以的,但是我对getline的操作不熟悉,便查阅了很多资料,发现都说的很模糊,借这个机会我想彻底理清楚getline的用法;  网上有说getline有两种用法的,我在这总结一下,一、getline()用的比较多的用法 1) istrea…

  • Navicat 15 for MySQL 激活码[在线序列号]

    Navicat 15 for MySQL 激活码[在线序列号],https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • python读取图片文件名_python 获取图片并自动命名保存

    python读取图片文件名_python 获取图片并自动命名保存#-*-coding:UTF-8-*-#导入第三方库importurllibfrombs4importBeautifulSoupimportrequestsimportosimporttimeimportrandom#获取文件夹,如果文件夹不存在则创建新文件夹ifos.path.isdir(‘E://biaoqing//’):passelse:os.mkdir(‘E…

  • RedisClient的安装及基本使用[通俗易懂]

    RedisClient的安装及基本使用[通俗易懂]管理redis的可视化客户端目前较流行的有三个:RedisClient;RedisDesktopManager;RedisStudio.这里目前给大家介绍RedisClient的下载安装及基本使用。RedisClient是Redis客户端的GUI工具,使用Javaswt和jedis编写,可以方便开发者浏览Redis数据库。该软件支持简体中文,非常适合国内用户使用,不需要汉化就可以直接使用。RedisClient将redis数据以资源管理器的界面风格呈现给用户,可以帮助redis

  • tomcat java_maven和java有什么区别

    tomcat java_maven和java有什么区别缓存什么是缓存[Cache]存在内存中的临时数据将用户经常查询的数据放在缓存(内存)中,用户去查询数据的时候就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。为什么使用缓存减少和数据库的数据交换次数,较少系统开销,提高系统效率什么样的数据库能使用缓存经常查询并且不经常改变的数据Mybatis缓存MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。默认情况下,只启用了本地的会话缓存,它仅

发表回复

您的电子邮箱地址不会被公开。

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