2014-09-26 13 views
13

sonra yanlış düğme metni hizalama Ben Android (Nexus 5) Xamarin.Forms (sürüm 1.2.2) ile ilgili bir sorun var. Button.Text hizalaması genellikle bir tıklama yaptıktan sonra ortalanmıyor. Kısa bir projede, UI'yi güncellemenin soruna neden olduğunu anladım.Xamarin.Forms: click (Android)

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

"buttonBad" (label.Text güncelleyerek) üzerine bir tıklama Bu düğmenin metin hizalama artık merkezli edilemez neden olur. "ButtonGood" düğmesine bir tıklama, soruna neden olmaz.

Bu sorunu çözmek için iyi bir çözüm var mı?

Bu geçici çözüm çok karmaşık gibi görünüyor: http://forums.xamarin.com/discussion/20608/fix-for-button-layout-bug-on-android

düzenleme: UI bir programlama düzenleme de vakalar hata. Kısa bir bekleyişten sonra label.Text'un bir async yönteminde değiştirilmesi, "buttonGood" yazısının bir tıklamadan sonra yanlış hizalanmasını sağlar.

EDIT2: I GitHub'dan örnek/deney projesi oluşturuldu: https://github.com/perpetual-mobile/ButtonTextAlignmentBug.git hizalama doğru, StackLayout bir AbsolutLayout ile ikame edilir, ama StackLayout iyi çalışması gerekir.

+0

Not düğmesine ilk kez tıklandı. – Falko

+0

Halen 1.2.3-yayın öncesi 4'te de mevcut. –

+0

Burada da aynı sorun. Umarım yakında çözülür. –

cevap

13

Tamam, bu saçma böcekle başa saat sonra, ben özel bir oluşturucusunu ve baskın ChildDrawableStateChanged uygulayarak bunu çözüldü: "kötü kadar "iyi renkli" tıklayarak sadece yeniden düzenlenmesinden olmadan çalıştığını

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

Evet! Benim için çalışıyor. – Falko

+0

Benim için de! perfekt :) büyük thx! –

+0

Eğlence gerçeği: İki düğme için 'HeightRequest = 20' (veya benzer değer) ve' VerticalOptions = LayoutOptions.FillAndExpand 'ayarı, bu düzeltmeyle bile (XF 1.2.3'te test edilmiştir) altyazıyı yeniden atlatır. Ama bu muhtemel bir takımyıldızı, sanırım. – Falko