Android Studio 3.1.1:LinearLayout内无约束TextView为何居中?
为啥你的TextView会在LinearLayout里居中?我来给你掰扯清楚!
哎,这个场景我可太熟悉了!你以为不给TextView加约束就会默认左上角,结果却居中了,核心问题出在你家myLinearLayout的android:gravity属性上!
先给你区分两个容易搞混的Android布局属性,别再懵了:
android:gravity:管的是LinearLayout内部子View的对齐——简单说就是你往这个容器里塞的东西,放在容器的哪个位置android:layout_gravity:管的是LinearLayout自己在父布局里的位置——和子View没关系哈
LinearLayout默认的gravity是start|top(也就是左上角对齐),但如果你的myLinearLayout不小心被设置了android:gravity="center"(或者center_horizontal+center_vertical这种组合),那里面的TextView自然就会乖乖跑到中间去,哪怕你没给TextView加任何布局约束!
怎么验证和解决?
- 先去翻你的XML代码,找到
myLinearLayout的部分,看看是不是偷偷写了android:gravity="center"(有时候可能是复制代码的时候带进来的,自己没注意) - 要是想让TextView回到左上角,要么把这个
gravity属性改成start|top,要么直接删掉它——毕竟默认就是左上角对齐嘛
给你贴个修正后的代码例子,一看就懂:
<!-- 假设根布局是垂直方向的LinearLayout --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- 顶部的AD区域 --> <View android:id="@+id/adView" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ccc" /> <!-- 中间填充的myLinearLayout,这里修正了gravity属性 --> <LinearLayout android:id="@+id/myLinearLayout" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="start|top" <!-- 改成这个,或者直接删掉 --> android:orientation="vertical"> <TextView android:id="@+id/tvName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Name" /> <TextView android:id="@+id/tvDetail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Detail" /> </LinearLayout> <!-- 底部的Close按钮 --> <Button android:id="@+id/closeBtn" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Close" /> </LinearLayout>
这样改完,你的两个TextView就会老老实实待在myLinearLayout的左上角啦~
内容的提问来源于stack exchange,提问作者HelloCW
相关产品推荐
相关产品推荐

