我在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也会出现错误。在等待一小段时间后,在异步方法中更改label.Text
会导致" buttonGood"单击后将其文本对齐错误。
EDIT2: 我在GitHub上创建了一个示例/测试项目: https://github.com/perpetual-mobile/ButtonTextAlignmentBug.git 当StackLayout被AbsolutLayout替换时,对齐是正确的,但我需要StackLayout才能正常工作。
答案 0 :(得分:13)
好的,经过几个小时处理这个愚蠢的错误后,我通过实现自定义渲染器并覆盖ChildDrawableStateChanged
来解决它:
public override void ChildDrawableStateChanged(Android.Views.View child)
{
base.ChildDrawableStateChanged(child);
Control.Text = Control.Text;
}