You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:24:36