2016-04-24 17 views
2

mein Problem ist wie folgt - Ich benutze eine Umschaltfläche, um ein TextView ein-/ausblenden. Was ich bekomme, ist ein leerer Raum, wenn er versteckt ist.Xamarin Android - verstecken Sie eine Textansicht

Was ich bekommen möchte, ist 'Neuzeichnen'/'neu laden' das Layout, anstatt nur die TextView versteckt es wird entfernt oder hinzugefügt - ohne diesen leeren Platzhalter in der Mitte meines Layouts.

Ich komme aus Cordova und benutzte Angular vorher. Irgendeine Hilfe???

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

Antwort

7

Wie Sie 3 in https://developer.xamarin.com/api/type/Android.Views.ViewStates/Visibility hat lesen können Zustände:

  • Visible zeigen nur die normalerweise das Objekt
  • Invisible das Layout hält aber nicht das Element ziehen (wie Deckkraft auf 0 gesetzt) ​​
  • Gone das Element entfernt vollständig aus dem Objektbaum

So in Ihr Fall möchten Sie wahrscheinlich

_addressManual.Visibility = Android.Views.ViewStates.Gone 

statt Android.Views.ViewStates.Invisible

Sie können auch Android reference

1

Verwendung ViewStates.Gone, um es vollständig auszublenden

0

Vielleicht muss man mit Visibility.Gone versuchen Sie

3

Versuchen Sie, diese Textview:

_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

Verdammt schnell! –

1

Mit Memory-Best Practices im Auge sehen, was Sie wirklich tun möchte, ist dies:

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

Wesentlichen die aufbleiben Sie nicht wollen, die Event-Handler-süchtig, wenn Die Ansicht ist für den Benutzer nicht sichtbar und gibt den Variablen möglicherweise die Möglichkeit, bei Bedarf die Daten zu sammeln. Auch die Event-Handler-Argumente (CompoundButton.CheckedChangeEventArgs) sagen Ihnen bereits, ob das Kontrollkästchen aktiviert ist oder nicht. Daher müssen Sie zu diesem Zweck keinen Verweis auf _addressHomeManualToogle führen.

Verwandte Themen