Xamarin Android - 隐藏文本视图

时间:2016-04-24 22:10:03

标签: c# android xaml xamarin xamarin.android

我的问题如下 - 我使用切换按钮隐藏/取消隐藏TextView。我得到的是隐藏的空地。

我想得到的是'重绘'/'重新加载'布局,而不是隐藏TextView,它被删除或添加到它 - 而不是在我的布局中间有这个空的占位符。

我来自科尔多瓦,之前正在使用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;
};

5 个答案:

答案 0 :(得分:13)

正如您在https://developer.xamarin.com/api/type/Android.Views.ViewStates/ Visibility中所读到的,有3个州:

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

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

_addressManual.Visibility = Android.Views.ViewStates.Gone

而不是Android.Views.ViewStates.Invisible

您还可以看到Android reference

答案 1 :(得分:3)

试试这个:

_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;
};

答案 2 :(得分:1)

使用ViewStates.Gone完全隐藏它

答案 3 :(得分:1)

记住记忆最佳实践,你真正想做的是:

    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的引用。

答案 4 :(得分:0)

也许你必须在TextView上试用Visibility.Gone