Xamarin 4.7.10.38中android:textAlignment在Designer中不生效且值为0
我之前在Xamarin 4.7.10.38版本里碰到过一模一样的问题——明明在布局XML里设置了android:textAlignment="center",但运行后文本完全不对齐,查属性值发现居然变成了0。你贴的布局代码本身没问题,这个锅得甩给这个版本Xamarin的绑定bug。
给你几个可行的解决方案:
用gravity属性替代textAlignment
对于TextView来说,android:gravity="center"和textAlignment="center"的视觉效果几乎一致,而且在这个版本的Xamarin里不会出现属性被重置的问题。修改后的TextView代码如下:<TextView android:text="Hallo World" android:layout_width="394.0dp" android:layout_height="68.5dp" android:id="@+id/textView1" android:textColor="@android:color/background_dark" android:textSize="36dp" android:layout_marginBottom="58.0dp" android:gravity="center" />通过C#代码动态设置对齐方式
如果你的场景必须用textAlignment,可以在代码里手动赋值,绕开XML解析的bug。比如在Activity的OnCreate方法里:protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.YourLayoutName); var textView = FindViewById<TextView>(Resource.Id.textView1); if (textView != null) { textView.TextAlignment = Android.Views.TextAlignment.Center; } }升级Xamarin版本彻底解决
这个问题是Xamarin 4.7.x系列的已知缺陷,后续的版本已经修复了这个属性映射错误。如果项目允许的话,建议升级到Xamarin.Android 8.3及以上版本(对应Xamarin 4.8+),这样就能正常在XML里使用textAlignment属性了。
简单说下原因:这个版本的Xamarin在解析布局XML的textAlignment属性时,没有正确把字符串值映射到对应的枚举常量,导致属性被错误设置为默认的TextAlignment.Unspecified(对应数值0),所以你的设置看起来完全没生效。
内容的提问来源于stack exchange,提问作者Ayman Mubark

