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 的引用。
我的问题如下 - 我使用切换按钮 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 的引用。