java.lang.ClassCastException: android.widget.*Layout$LayoutParams

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

在android中用代码动态添加组件或者改变某种布局(组件)的高度时,会遇到如题所示的类转换异常。

如果你要将一个view添加到另一个布局中或者为这个view重新设定宽高等布局属性,你为该View设置的布局参数类型与其父类所使用的布局参数类型一样。此外就是说若是最上层的布局,则不需要设定此项。

比如:

<LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"   
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content">  
    <FrameLayout  
    android:id="@+id/FrameLayout01"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content" /> 
</LinearLayout> 

若想在代码中动态改变FrameLayout的大小,应该这样写:

FrameLayout frameLayout=(FrameLayout) convertView.findViewById(R.id.FrameLayout01);  
LinearLayout.LayoutParams ff=new LinearLayout.LayoutParams(LayoutParams.WRAP_C
ONTENT, height); 
frameLayout.setLayoutParams(ff); 

按照上面的说法,那么若是底层布局是LinearLayout,那么添加view的时候指定的宽高参数就必然是Linear.LayoutParams,可我在尝试过程中发现使用ViewGroup.LayoutParams,RelativeLayout.Params也可以运行,且不会出错,以下是代码:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/test_root_linearlayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

</LinearLayout> 
public class TestActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

        RelativeLayout rootLayout; 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.test); 
        rootLayout = (LinearLayout) findViewById(R.id.test_root_linearlayout); 
        LinearLayout.LayoutParams rootLinaerParams = new LinearLayout.LayoutParams( 
                100, 100); 
        ViewGroup.LayoutParams rootGroupParams = new LinearLayout.LayoutParams( 
                100, 100); 
        RelativeLayout.LayoutParams rootRelativeParams = new RelativeLayout.LayoutParams( 
                100, 100); 
        TextView testView = new TextView(this); 
        testView.setText("根布局测试动态添加组件并设置其大小"); 
        testView.setLayoutParams(rootGroupParams); 
        rootLayout.addView(testView); 
        // rootLayout.addView(testView, viewParams); 
}

经过试验,新增加的TextView的布局参数使用LinearLayout.LayoutParams,RelativeLayout.LayoutParams,ViewGroup.LayoutParams都是可以正确显示的,不相信的朋友,自己也可以试试看。至于这到底是什么原因呢,我目前也不清楚,希望有知道的朋友留言指教一下,谢谢

本文出自 “壮志凌云” 博客,请务必保留此出处http://sunjilife.blog.51cto.com/3430901/1159639

解决 Android 中的 ClassCastException:ViewGroup$MarginLayoutParams 无法转换为 android 为了解决这个问题,我们需要确保正确地使用适当的布局参数,并将其与正确的视图类型进行关联。通过遵循正确的布局参数类型和视图类型的配对,我们可以避免这个错误,并正确地操作视图和布局参数。为了解决这个问题,我们需要确保正确地使用适当的布局参数,并将它们与正确的视图类型进行关联。下面是一些可能导致这个错误的常见情况,以及如何修复它们的示例代码。在这种情况下,我们需要确保将布局参数对象转换为与其关联的正确视图类型。这个错误的原因是在代码中出现了类型不匹配的情况。在创建视图时,需要使用适当的布局参数类型。 阅读详情

相关推荐

Win10文件夹只读属性自动恢复?彻底解决方法解析

Win10文件夹只读属性自动恢复?彻底解决方法解析在Windows系统使用过程中,文件权限管理常会遇到棘手问题。最近多位用户反馈:取消文件夹只读属性后,系统却自动恢复该设置,导致无法正常复制或修改文件。本文将深入分析该现象的产生原因,并提供多种解决方案,帮助开发者彻底摆脱权限困扰。

mmoo_python的博客 7307

androidx.constraintlayout.widget.ConstraintLayout cannot be cast to android.widget.TextView

问题分析:这是因为对于ConstraintLayout和textView,布局XML文件具有相同的id msg。因此,在代码中使用R.id.msg引用textView时,它会链接到ConstraintLayout,从而导致ClassCast异常。

m0_63435151的博客 2276

Veristand simulink 集成 simulink 非正版如何处理

1、安装 veristand model Generation Support add-on。matlab 安装veristand model support 记录。下载 以后 如果非正版matlab 直接拖命令行执行。下载后直接命令行执行即可。

flik9527的博客 575

一个java.lang.ClassCastException异常的原因及其解决

Android下,开发一个相机程序,实现一个从SurfaceView继承的CameraView,在onCreate函数里把这个类的对象设为主View,也就是说这个CameraView没有放在任何布局里面,像这样:setContentView(mCameraView); 本来这个CameraView是布满全屏的,可我需要根据手机窗口的尺寸,把这个CameraView调整为正方形的,当然我在绘制相...

格物致知的专栏 [音视频编解码 网络协议 计算机视觉 计算机图形学 图像理解 语音识别 机器学习 模拟电路 传感器] 2352

Android BUG 之 java.lang.ClassCastException

如上问题所述,如果你想将 A 类型的对象转换成 B 类型的对象,那么你需要确保 A 类型是 B 类型的子类或实现类。如果它们不是同一个类或者没有继承/实现关系,那么就不能进行强制类型转换。

X_sunmmer的博客 1171

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

java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams       在代码里面改变布局的宽高,直接报错。通过查资料。原来如果你要将一个view添加到另一个布局中或者为这个view重新设定

不在状态的博客 1579

报错:ViewPager$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams

java.lang.ClassCastException: android.support.v4.view.ViewPager$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams 类似的还有 java.lang.ClassCastException: android.widget.RelativeLayo

Android、HTML、CSS、JS、JAVA、Kotlin、PHP等技术 5501

java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.view.Vie

java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.view.ViewGroup$MarginLayoutParams at com.mystudy.studyviews.views.ViewGroupView.onMeasure(ViewGroup...

faskjj的博客 2795

androidx.constraintlayout.widget.ConstraintLayout cannot be cast to android.widget.LinearLayout

我的最终目的是:点击一个item,去启动一个Activity页面。这个页面,我给了一个id,并且第一级是线性布局LinearLayout。卡了我半天,终于找到问题了。也就是第一级布局视图必须是LinearLayout。如果是其它布局,就会报错。随后我写了点击item的监听事件。

u011501017的博客 2939

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

报错日志:报错代码:场景:调整左右边距时报错。

chengzhenjia的博客 541

xlistview的布局

xmlns:app="http://schemas.android.com/apk/res-auto"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:co

heheyihehe的博客 361

java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView

在写自定义ListView侧滑删除时报了这样的一个错误,将布局文件中的组件移动之后就报 java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView这个错了。解决方案:将项目clean下就好了,亲试过,如下图:...

shenggaofei的博客 5254

xml修改后报错: java.lang.ClassCastException: android.widget.LinearLayout

 06-24 01:40:01.692: E/AndroidRuntime(997): Caused by: java.lang.ClassCastException: android.widget.LinearLayout 修改了xml布局后,就报上面的错误,意思大概是xml上定义的标签类型不一致,导致类型转换错误 但是反复检查后,发现类型是对的 解决方法是:删除ge

yuanyuan_186的专栏 762

android异常总结--java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast t

java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams 看下如下错误提示: java.lang.ClassCastException: android.widget.LinearLayout

Steampy专栏 1万+

java.lang.ClassCastException: TextView cannot be cast to androidx.recyclerview.widget.RecyclerView

今天在学习的时候出现了一个这样的问题,日志中出现的代码如下: 此地方抛出的异常代码是: java.lang.ClassCastException: androidx.appcompat.widget.AppCompatTextView cannot be cast to androidx.recyclerview.widget.RecyclerView 我当时是需要点击文字才能够转到recyclerview的界面,导致出现了应用闪退的现象。 改进方法: 将textview改成了button之后,则可正常

m0_49359388的博客 3164

开发问题及解决 java lang ClassCastException android widget LinearLa

开发问题及解决 java lang ClassCastException android widget LinearLa

gfjggtf的博客 333

报错:ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.F

最近需要做竖屏的项目,在启用一段很久没动过的代码后,发现启动app的时候竟然报错了。 看了下Log,报的是ClassCastException E AndroidRuntime: FATAL EXCEPTION: main E AndroidRuntime: Process: com.my.backcarapp, PID: 2327 E AndroidRuntime: java.lan...

qq_39790633的博客 2333
上一篇: linux svn和web同步
下一篇: android studio gradle下载失败解决方案
ohanweb123
博客等级 码龄14年 2粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值