Android开发:向LinearLayout添加TextView后视图无法显示问题排查
问题原因与解决方案
为什么logoTextView不显示?
核心问题是你把logo添加到了布局的最后位置,被后续的Fragment挤到了屏幕可视区域之外。
具体细节:
- 你的
MainLayout在构造时,通过doInflate方法已经将layout_main.xml里的内容(先显示main_menu的三个按钮,再显示ActivityFragment)添加到了自身内部。 - 之后你调用
addView(logoTextView)时,默认会把View添加到布局的最后一个位置,也就是ActivityFragment的下方。如果ActivityFragment的内容填充了剩余的屏幕空间,logo就会被推到屏幕外面,自然无法被看到。
快速修复方案
把logo添加到布局的最顶部位置,修改Activity里的代码:
// 替换原来的addView代码,第二个参数0表示插入到索引0的位置(布局最前面) ((MainLayout) this.layout).addView(logoTextView, 0);
优化建议
为了避免布局参数异常,建议给logoTextView设置明确的布局参数后再添加:
// 创建垂直LinearLayout的布局参数 LinearLayout.LayoutParams logoParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT ); // 可以添加顶部间距,让logo和按钮之间有留白(需要在dimens.xml里定义对应的尺寸) logoParams.topMargin = getResources().getDimensionPixelSize(R.dimen.logo_top_margin); logoTextView.setLayoutParams(logoParams); // 插入到布局最前面 ((MainLayout) this.layout).addView(logoTextView, 0);
额外提示
注意到你的MainLayout里有个拼写错误:getCaldendarButton方法名少了一个字母l,应该是getCalendarButton。虽然这不会影响当前logo的显示,但后续调用这个方法时可能会出现问题,建议及时修正。
内容的提问来源于stack exchange,提问作者Johnny_Wong
相关产品推荐
相关产品推荐

