2016-04-24 42 views
2

我的問題如下 - 我使用切換按鈕來隱藏/取消隱藏TextView。我隱藏的時候是空的空間。Xamarin Android - 隱藏文本視圖

我想要得到的是'重繪'/'重新加載'佈局,而不是隱藏它被刪除或添加到它的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; 
}; 

回答

7

正如你在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

1

使用ViewStates.Gone完全隱藏它

0

也許你有嘗試與Visibility.Gone你的TextView

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; 
}; 
+0

該死的速度夠快! –

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