我的问题如下 - 我使用切换按钮隐藏/取消隐藏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;
};
答案 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