代码动态添加View至LinearLayout后最后一个View被截断/显示过小
解决动态添加View到LinearLayout后最后一个View被截断的问题
问题原因
使用LayoutInflater.inflate()时传入null作为父容器参数,导致动态创建的View无法正确继承父LinearLayout的布局参数,布局计算出现异常,最终引发最后一个View显示不全或被截断的问题。此外,若父容器未设置滚动容器,当内容超出屏幕高度时也会出现此现象。
修复步骤
修正View Inflate方式:
在createTextFieldComponent方法中,inflate时传入目标父容器,并将attachToRoot设为false(因为后续会手动调用addView添加),这样View会正确继承父容器的LayoutParams。修改后的工具类代码:
public static View createTextFieldComponent(Context mContext, ItemTaskDetail task, LinearLayout parentLayout) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view; if (task.getType() != TaskType.TXT) { view = inflater.inflate(R.layout.layout_control_lable, parentLayout, false); } else { view = inflater.inflate(R.layout.layout_control_text_area, parentLayout, false); } return view; }调用时传入父容器实例:
llContent.addView(TaskUtils.createTextFieldComponent(requireContext(), task, llContent))添加滚动容器(可选但建议):
如果动态添加的View总高度超过屏幕,将外层的LinearLayout嵌套进ScrollView,避免内容超出可视区域被截断。修改布局文件:<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true"> <LinearLayout android:id="@+id/inner_task_llContent" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="@dimen/margin_m" android:paddingRight="@dimen/margin_l" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin"> </LinearLayout> </ScrollView>注意将LinearLayout的
layout_height改为wrap_content,让其根据内容自适应高度,ScrollView负责滚动显示全部内容。
问题现象
最后一个动态添加的View显示不全,底部被截断(效果如图:
)
内容的提问来源于stack exchange,提问作者Sunbey13
相关产品推荐
相关产品推荐

