Xamarin.Forms:Android平台上点击后按钮文本对齐错误

15

我在Android(Nexus 5)上使用Xamarin.Forms(版本1.2.2)时遇到了问题。Button.Text的对齐在执行点击操作后常常不居中。

在一个小项目中,我发现更新UI会导致这个问题。

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)会导致此按钮的文本对齐不再居中。点击 "buttonGood" 不会出现这个问题。

有什么好的解决办法吗?

这个解决办法似乎太复杂了:http://forums.xamarin.com/discussion/20608/fix-for-button-layout-bug-on-android

编辑:UI 的编程编辑也会导致该 bug。在短暂等待之后异步更改 label.Text 会导致单击后 "buttonGood" 的文本对齐错误。

编辑2:我在 GitHub 上创建了一个示例 / 测试项目:https://github.com/perpetual-mobile/ButtonTextAlignmentBug.git 当 StackLayout 被 AbsolutLayout 替换时,对齐是正确的,但我需要 StackLayout 正常工作。


注意,只有在第一次点击“坏按钮”之前,点击“好按钮”才能在不重新对齐的情况下起作用。 - Falko
即使在1.2.3-prerelease 4中仍然存在。 - Miha Markic
同样的问题在这里。希望它能尽快得到解决。 - Leon Cullens
1
这里正在进行一次讨论 http://forums.xamarin.com/discussion/24956/xamarin-forms-1-2-3-prerelease-4-out#latest - Miha Markic
仍然存在于1.2.3版本中:这简直是疯狂的。 - Jakub Arnold
1个回答

14

好的,经过数小时处理这个愚蠢的错误后,我通过实现自定义的渲染器并覆盖 ChildDrawableStateChanged 方法来解决了它:

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

有趣的事实:对于这两个按钮,设置 HeightRequest = 20(或类似值)和 VerticalOptions = LayoutOptions.FillAndExpand 可以使标题再次跳动,即使使用了此修复程序(在 XF 1.2.3 上进行过测试)。但我认为这是一个不太可能出现的情况。 - Falko
你是不是为按钮编写了自定义渲染器? - Lucas Moura Veloso
嗨@LucasMouraVeloso,是的,我将其实现为渲染器,以应用于应用程序中的所有按钮。 - Mina Wissa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接