Android Studio模拟器与三星S2(Android4.1.2)文本对齐异常咨询
这个坑我之前踩过!你的问题核心在于**textAlignment属性的API版本支持限制**:textAlignment是Android 4.2(API 17)才正式引入的,而你的三星S2系统是Android 4.1.2(API 16),低于这个版本,系统根本识别不了这个属性,就会 fallback 到系统默认的文本对齐方式(刚好你的设备默认是右对齐),而Android 6.0(API 23)已经完全支持这个属性,所以模拟器上显示正常。
给你几个靠谱的解决方案:
最直接的修复:用
android:gravity="center"替代textAlignmentgravity是更早版本就支持的属性,专门用来控制View内部内容的对齐方式,对TextView来说,设置gravity="center"就能让文本水平+垂直居中(如果只需要水平居中可以用center_horizontal)。修改后的代码如下:<TextView android:id="@+id/VersesEnglish" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2" android:layout_gravity="bottom" android:layout_marginLeft="24dp" android:layout_marginRight="24dp" android:paddingBottom="20dp" android:text="Text HERE" android:gravity="center" />注意区分
layout_gravity和gravity:layout_gravity是控制TextView在父布局中的位置(你设置的bottom是让TextView贴在父布局底部),而gravity才管内部文本的对齐,别搞混啦。版本兼容方案(如果想保留
textAlignment)
如果你希望高版本用textAlignment,低版本用兼容属性,可以创建版本差异化布局:- 在
res/layout/目录下的布局用android:gravity="center" - 在
res/layout-v17/目录下创建同名布局,使用android:textAlignment="center"
系统会自动根据设备API版本加载对应的布局文件,兼顾兼容性和新特性。
- 在
额外检查:排除父布局影响
虽然模拟器显示正常,但还是可以确认下父布局有没有设置gravity或者其他可能影响子View对齐的属性,不过根据你的描述,大概率还是API版本的问题,先试试前两个方案应该就能解决。
内容的提问来源于stack exchange,提问作者Samuel

