Xamarin Android - 隐藏文本视图

Xamarin Android - hide a textview

我的问题如下 - 我使用切换按钮 hide/unhide TextView。当它被隐藏时,我得到的是一个空的 space。

我想要得到的是 'redraw'/'reload' 布局,因此不只是隐藏 TextView,而是将其删除或添加到其中 - 而不是在我的布局中间有这个空占位符.

我来自 Cordova,之前使用过 Angular。有帮助吗???

_addressManual = FindViewById<EditText> (Resource.Id.addressManual);

_addressHomeManualToogle.Click += (o, e) => {
    if (_addressHomeManualToogle.Checked)
        _addressManual.Visibility = Android.Views.ViewStates.Visible;
    else
        _addressManual.Visibility = Android.Views.ViewStates.Invisible;
};

使用ViewStates.Gone完全隐藏它

也许你必须尝试在你的 TextView

上使用 Visibility.Gone

试试这个:

_addressManual = FindViewById<EditText> (Resource.Id.addressManual);

_addressHomeManualToogle.Click += (o, e) => {
    if (_addressHomeManualToogle.Checked)
        _addressManual.Visibility = Android.Views.ViewStates.Visible;
    else
        _addressManual.Visibility = Android.Views.ViewStates.Gone;
};

正如您在 https://developer.xamarin.com/api/type/Android.Views.ViewStates/ 中看到的那样 Visibility 有 3 个状态:

  • Visible 只是正常显示对象
  • Invisible 保留布局但不绘制元素(如不透明度设置为 0)
  • Gone 从对象树中完全删除元素

所以在你的情况下,你可能想要

_addressManual.Visibility = Android.Views.ViewStates.Gone

而不是Android.Views.ViewStates.Invisible

您还可以看到Android reference

考虑到内存最佳实践,您真正想要做的是:

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        _addressManual = FindViewById<EditText>(Resource.Id.addressManual);
    }

    protected override void OnResume()
    {
        _addressHomeManualToogle.CheckedChange += _addressHomeManualToogle_CheckedChange;
        base.OnResume();
    }

    protected override void OnPause()
    {
        _addressHomeManualToogle.CheckedChange -= _addressHomeManualToogle_CheckedChange;
        base.OnPause();
    }

    void _addressHomeManualToogle_CheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e)
    {
        if (e.IsChecked)
            _addressManual.Visibility = Android.Views.ViewStates.Visible;
        else
            _addressManual.Visibility = Android.Views.ViewStates.Gone;
    }

本质上,您不希望事件处理程序在视图对用户不可见时保持连接状态,从而在需要时为变量提供垃圾收集机会。 此外,事件处理程序参数 (CompoundButton.CheckedChangeEventArgs) 已经告诉您复选框是否已选中,因此无需为此目的保留对 _addressHomeManualToogle 的引用。