Xamarin动态添加TextView至布局却不显示,需配置哪些属性?
解决TextView无法显示的问题
嘿,我仔细看了你的代码,发现几个核心问题导致TextView没出现在屏幕上,咱们一步步修正:
1. 布局参数类型不匹配
你的父容器是LinearLayout,但你给新创建的TextView用的是RelativeLayout.LayoutParams——这俩完全不兼容啊!LinearLayout只认LinearLayout.LayoutParams,用错参数类型的话,布局系统根本不知道怎么摆放这个控件,自然就显示不出来了。
2. 逻辑错误的布局规则
你写了param.AddRule(LayoutRules.Below, textView2.Id),这相当于让TextView放在它自己的下方,这逻辑完全不通啊!而且因为参数类型不对,这条规则不仅没用,反而可能干扰布局解析。
3. 离谱的缩放参数
ScaleX = 300和ScaleY = 300会把TextView放大300倍,就算控件能显示,也会直接超出屏幕范围,你肯定看不到内容。
修正后的代码示例
我把你的代码改好了,关键改动都标出来了:
button1.Click += (se, ev) => { // 改用LinearLayout对应的布局参数,和父容器类型匹配 var param = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent); // 用margin来调整位置,比SetX/SetY更符合LinearLayout的布局逻辑 param.SetMargins(30, 30, 0, 0); var textView2 = new TextView(layout.Context) { Id = 123, Text = "0000000000000", TextSize = 30, // 删掉极端的缩放参数,正常显示就好 // ScaleY = 300; // ScaleX = 300; // 不需要手动设置宽高,布局参数已经搞定了 // SetWidth(300); // SetHeight(300); }; layout.AddView(textView2, param); // AddView之后布局会自动刷新,不用手动调Invalidate // layout.Invalidate(); var newTx = FindViewById<TextView>(123); var TextTest = newTx.Text; };
额外的小提示
- 如果你确实需要用相对定位(比如让TextView在某个按钮下方),那得把父容器改成
RelativeLayout,同时用RelativeLayout.LayoutParams,而且AddRule的目标ID要是布局里已经存在的控件ID(比如按钮的ID),不能是当前创建的TextView自己。 - 尽量用布局参数控制控件的位置和大小,别用
SetX/SetY或者SetWidth/SetHeight,后者会破坏布局系统的自动适配,容易出问题。 - ScaleX/Y的取值一般0-2就够了,太大的话控件会直接超出屏幕,根本看不到。
内容的提问来源于stack exchange,提问作者uopeydel
相关产品推荐
相关产品推荐

