RelativeLayout 中的 Android 重力中心不像 LinearLayout 那样工作
Posted
技术标签:
【中文标题】RelativeLayout 中的 Android 重力中心不像 LinearLayout 那样工作【英文标题】:Android Gravity Center in RelativeLayout Doesn't Work Like LinearLayout 【发布时间】:2021-07-12 22:55:25 【问题描述】:对于RelativeLaout
:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:gravity="center">
<TextView
android:id="@+id/a_textView"
android:layout_
android:layout_
android:layout_marginEnd="8dp"
android:text="Sam"
android:textColor="@color/black"
android:textSize="30sp" />
<TextView
android:id="@+id/b_textView"
android:layout_
android:layout_
android:layout_marginEnd="16dp"
android:text="Kate"
android:textColor="@color/black"
android:textSize="30sp"
android:layout_toEndOf="@id/a_textView"/>
<Button
android:layout_
android:layout_
android:text="Show"
android:textSize="30sp"
android:layout_toEndOf="@id/b_textView"/>
</RelativeLayout>
结果:未完全居中
对于LinearLayout
:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="horizontal"
android:gravity="center"> //<- here, child Views are the same
结果:完美居中
问题:为什么这样以及如何通过仅修改RelativeLayout
中的属性 使RelativeLayout
在LinearLayout
中达到相同的结果?
【问题讨论】:
发布您的布局。 @Gabriele Mariotti 更新。 【参考方案1】:您有不同的解决方案,但更改了子视图中的某些属性。
<RelativeLayout
android:layout_
android:layout_
android:gravity="center"
..>
<LinearLayout
android:orientation="horizontal"
android:gravity="center_horizontal">
<TextView/>
<TextView/>
<Button/>
</LinearLayout>
</RelativeLayout>
或:
<RelativeLayout
android:layout_
android:layout_
android:gravity="center"
..>
<TextView/>
<TextView/>
<Button
android:layout_alignBaseline="@id/a_textView">
</RelativeLayout>
【讨论】:
第二种解决方案,layout_alignBaseline
仅在Button
文本大小与TextView
:***.com/questions/6447361/… 相同时才起作用,并且在其他View
中不起作用ImageView
,所以它不是一个通用的解决方案。第一个解决方案是可以接受的,只是它增加了布局的复杂性。无论如何,很高兴收到官方的消息。谢谢!【参考方案2】:
使用 layout_alignTop 和 layout_alignBottom
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:gravity="center">
<TextView
android:id="@+id/a_textView"
android:layout_
android:layout_
android:layout_marginEnd="8dp"
android:text="Sam"
android:gravity="center"
android:layout_alignBottom="@id/b_textView"
android:layout_alignTop="@id/b_textView"
android:textColor="@color/black"
android:textSize="30sp" />
<TextView
android:id="@+id/b_textView"
android:layout_
android:layout_
android:layout_marginEnd="16dp"
android:text="Kate"
android:gravity="center"
android:textColor="@color/black"
android:textSize="30sp"
android:layout_alignTop="@id/button"
android:layout_alignBottom="@id/button"
android:layout_toEndOf="@id/a_textView"/>
<Button
android:id="@+id/button"
android:layout_
android:layout_
android:text="Show"
android:gravity="center"
android:textSize="30sp"
android:layout_toEndOf="@id/b_textView"/>
</RelativeLayout>
【讨论】:
以上是关于RelativeLayout 中的 Android 重力中心不像 LinearLayout 那样工作的主要内容,如果未能解决你的问题,请参考以下文章
如何避免在android中的relativelayout中重叠视图
Android - fill_parent 在RelativeLayout 中的行为不符合预期
Android中RelativeLayout中的视图宽度和高度始终为零
自定义ListView的RelativeLayout中的Android布局居中