TextView 不显示分配给 Text 属性的字符串

Posted

技术标签:

【中文标题】TextView 不显示分配给 Text 属性的字符串【英文标题】:TextView not displaying the string assigned to the Text property 【发布时间】:2021-12-17 01:37:01 【问题描述】:

我有一个这样定义的 TextView:

<TextView
        android:id="@+id/middleText"
        android:layout_
        android:layout_
        android:layout_centerInParent="true"
        android:text="Click the mail button" />

我得到这样的参考:

    private TextView _textView;

    protected override void OnCreate(Bundle savedInstanceState)
    
        base.OnCreate(savedInstanceState);
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        SetContentView(Resource.Layout.activity_main);

        _textView = FindViewById<TextView>(Resource.Id.middleText);

当点击视图中的按钮时,会运行以下代码:

        if (_accelerometerController.IsStarted)
        
            _accelerometerController.Stop();
            _timer?.Stop();
            _timer?.Dispose();
            _timer = null;
        
        else
        
            _accelerometerController.Start();
            _timer = new Timer(1000);
            _timer.Elapsed += Timer_Elapsed;
            _timer.AutoReset = true;
            _timer.Enabled = true;
        

当调用 _timer.Elapsed 事件时,将运行以下代码:

    private void Timer_Elapsed(object sender, ElapsedEventArgs e)
    
        //MainThread.BeginInvokeOnMainThread(() => _textView.Text = _accelerometerController.Status);
        //_textView.SetText(_accelerometerController.Status, TextView.BufferType.Normal);
        //RunOnUiThread(() => _textView.Text = _accelerometerController.Status);
        _textView.Text = _accelerometerController.Status;
        _textView.Invalidate();
    

_textView.Text 属性设置正确,但图形大部分时间不会更新以显示新字符串。一旦应用程序选择不更新图形,它就不会恢复,并且文本似乎永远相同,并且在调试时我可以看到 Text 属性设置正确并且其他控件继续工作。 我尝试了多种不同的方式来设置文本,但都产生了相同的结果。

我是 Xamarin 的新手,我不确定项目类型,我为此项目选择了“Android App (Xamarin)”项目模板,但我不确定这是否相同,或包括 Xamarin.Forms。

为什么会这样?我该如何解决?

【问题讨论】:

通过创建 Android App (Xamarin),您正在创建 Xamarin.Android 应用程序,这意味着它是 Xamarin.Native for Android 应用程序,而不是 Xamarin.Forms 应用程序。 【参考方案1】:

如果您使用 Xamarin.Android 项目,您可以参考下面的代码。

布局:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_
android:layout_>
<TextView
    android:id="@+id/middleText"
    android:layout_
    android:layout_
    android:layout_centerInParent="true"
    android:text="Click the mail button" />
<Button
    android:id="@+id/button1"
    android:layout_
    android:layout_/>
</LinearLayout>

Activity:由于不知道_accelerometerController是什么,所以直接启动定时器。

  public class Activity8 : Activity

    private TextView _textView;
    private Button button;

    protected override void OnCreate(Bundle savedInstanceState)
    
        base.OnCreate(savedInstanceState);

        // Create your application here

        SetContentView(Resource.Layout.layout8);
        _textView = FindViewById<TextView>(Resource.Id.middleText);
        button = FindViewById<Button>(Resource.Id.button1);

        button.Click += Button_Click;

    

    private void Button_Click(object sender, EventArgs e)
    
        Timer _timer = new Timer(1000);
        _timer.Elapsed += Timer_Elapsed;
        _timer.AutoReset = true;
        _timer.Enabled = true;
    
    private void Timer_Elapsed(object sender, ElapsedEventArgs e)
    
        //MainThread.BeginInvokeOnMainThread(() => _textView.Text = _accelerometerController.Status);
        //_textView.SetText(_accelerometerController.Status, TextView.BufferType.Normal);
        //RunOnUiThread(() => _textView.Text = _accelerometerController.Status);
        _textView.Text = "Hello";
        _textView.Invalidate();
    

【讨论】:

以上是关于TextView 不显示分配给 Text 属性的字符串的主要内容,如果未能解决你的问题,请参考以下文章

android里面怎么给Textview设置超链接,还有字体颜色这些属性啊?

TextView文字描边实现

TextView标签的属性和跑马灯效果

布局与控件-TextView那些事儿

打标签怎么把字居中

TextView控件常用属性