2014-09-26 5 views
13

Ich habe ein Problem mit Xamarin.Forms (Version 1.2.2) auf Android (Nexus 5). Die Ausrichtung von Button.Text ist oft nicht zentriert, nachdem ein Klick ausgeführt wurde.Xamarin.Forms: falsche Schaltfläche Textausrichtung nach dem Klick (Android)

In einem kurzen Projekt habe ich herausgefunden, dass die Aktualisierung der Benutzeroberfläche das Problem verursacht.

public class App 
{ 
    public static Page GetMainPage() 
    { 
     var label = new Label { 
      Text = "label", 
     }; 
     var buttonBad = new Button { 
      Text = "buttonBad", 
      Command = new Command(() => label.Text += "1"), 
     }; 
     var buttonGood = new Button { 
      Text = "buttonGood", 
     }; 

     return new ContentPage { 
      Content = new StackLayout { 
       Children = { 
        buttonBad, 
        buttonGood, 
        label, 
       } 
      } 
     }; 
    } 
} 

Ein Klick auf „buttonBad“ (Aktualisierung der label.Text) bewirkt, dass der Text-Ausrichtung dieser Taste nicht mehr zentriert werden. Ein Klick auf "buttonGood" verursacht das Problem nicht.

Gibt es eine gute Problemumgehung, um dieses Problem zu lösen?

Diese Problemumgehung scheint zu kompliziert zu sein: http://forums.xamarin.com/discussion/20608/fix-for-button-layout-bug-on-android

edit: A programmatisch bearbeiten der UI Fällen auch der Bug. Das Ändern der label.Text in einer asynchronen Methode nach einer kurzen Wartezeit führt dazu, dass der "buttonGood" seinen Text nach einem Klick falsch anordnet.

edit2: Ich habe ein Beispiel/Testprojekt auf GitHub: https://github.com/perpetual-mobile/ButtonTextAlignmentBug.git Die Ausrichtung ist korrekt, wenn der StackLayout durch einen AbsolutLayout ersetzt wird, aber ich brauche die StackLayout gut zu funktionieren.

+0

Beachten Sie, dass nur auf dem „guten Button“ klicken, ohne Neuausrichtung bis zum „schlechten funktioniert Taste "wurde das erste Mal angeklickt. – Falko

+0

Noch vorhanden in 1.2.3-prerelease 4. –

+0

Gleiches Problem hier. Hoffentlich wird es bald behoben. –

Antwort

13

Ok, nach Stunden mit diesem dummen Fehler im Umgang, beschloß ich, es durch einen benutzerdefinierten Renderer und überwiegende ChildDrawableStateChanged Umsetzung:

public override void ChildDrawableStateChanged(Android.Views.View child) 
{ 
    base.ChildDrawableStateChanged(child); 
    Control.Text = Control.Text; 
} 
+0

Yeah! Funktioniert bei mir. – Falko

+0

Für mich auch! perfekt :) groß thx! –

+0

Wissenswertes: Das Setzen von 'HeightRequest = 20' (oder ähnlichem Wert) und' VerticalOptions = LayoutOptions.FillAndExpand' für die beiden Schaltflächen bewirkt, dass die Beschriftung auch bei diesem Fix erneut springt (getestet auf XF 1.2.3). Aber das ist eine unwahrscheinliche Konstellation, denke ich. – Falko

Verwandte Themen