如何通过代码动态修改LinearLayout宽高?解决LayoutParams类型错误
解决LinearLayout动态修改宽高时的LayoutParams类型错误问题
嗨,这个问题我之前也踩过坑!本质是LayoutParams的类型不匹配——你的LinearLayout的父容器应该是AbsListView的子类(比如ListView或者GridView),所以它的LayoutParams实际上是AbsListView.LayoutParams类型,但你直接用了通用的ViewGroup.LayoutParams,就触发了类型转换错误。
给你两种可行的修改方案:
方案一:强制转换为正确的LayoutParams类型
直接把获取到的LayoutParams强制转换成父容器要求的类型,修改后的代码如下:
LinearLayout linear = findViewById(R.id.linear); // 强制转换为AbsListView.LayoutParams,适配父容器类型 AbsListView.LayoutParams params = (AbsListView.LayoutParams) linear.getLayoutParams(); params.width = 1; // 设置目标宽度 linear.setLayoutParams(params);
方案二:直接创建对应类型的LayoutParams实例
如果担心强制转换可能出现的异常,也可以直接实例化正确的LayoutParams类型,保留原高度的话可以这么写:
LinearLayout linear = findViewById(R.id.linear); // 获取原LayoutParams来保留高度值 ViewGroup.LayoutParams oldParams = linear.getLayoutParams(); // 创建AbsListView.LayoutParams实例,设置新宽度+原高度 AbsListView.LayoutParams newParams = new AbsListView.LayoutParams(1, oldParams.height); linear.setLayoutParams(newParams);
额外提醒
Android里View的LayoutParams类型是由它的父容器决定的,不是View本身:
- 父容器是LinearLayout → 用
LinearLayout.LayoutParams - 父容器是RelativeLayout → 用
RelativeLayout.LayoutParams - 父容器是AbsListView系列 → 用
AbsListView.LayoutParams
之前的代码没有指定具体的子类,编译器无法识别正确的类型,所以才会报错~
内容的提问来源于stack exchange,提问作者user9788491
相关产品推荐
相关产品推荐

