【问题标题】:RelativeLayout gravity center not workingRelativeLayout 重心不起作用
【发布时间】:2012-06-09 22:00:14
【问题描述】:

我正在尝试将多个视图水平居中在作为基础的 RelativeLayout 中。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_horizontal"
    android:background="@android:color/transparent" >

这行不通。对于其中一个视图,我已将 centerInParent 设置为 true 并且确实有效。但是,我不能使用这个解决方案,因为我有 2 个并排的视图需要集中在一起。尝试对此进行优化,因此我想避免嵌套布局,尤其是线性布局。

我有什么明显的遗漏吗?我认为这个属性是为这种情况而设计的。

【问题讨论】:

    标签: android center android-relativelayout gravity


    【解决方案1】:

    我回答了一个类似的问题,涉及三个视图,但没有使用嵌套的 ViewGroups。

    https://stackoverflow.com/a/13279846/1011746

    这是在 API 11 中测试的。

    对于两个视图水平的情况:

    <RelativeLayout
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:gravity="center"
      android:background="@android:color/black"
      >
      <Button
        android:id="@+id/apply"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="APPLY"
        android:textSize="20sp"
        />
      <Button
        android:id="@+id/undo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="UNDO"
        android:textSize="20sp"
        android:layout_toRightOf="@id/apply"
        />
    </RelativeLayout>
    

    对于两个视图垂直的情况:

    <RelativeLayout
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:gravity="center"
      android:background="@android:color/black"
      >
      <Button
        android:id="@+id/apply"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="APPLY"
        android:textSize="20sp"
        />
      <Button
        android:id="@+id/undo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="UNDO"
        android:textSize="20sp"
        android:layout_below="@id/apply"
        />
    </RelativeLayout>
    

    【讨论】:

    • 此解决方案仅在视图可以堆叠在一行中时有效,如果布局更复杂,唯一的解决方案是使用嵌套布局作为其他答案的建议或采取不同的方法。
    • @mindriot 使用 对于两个视图水平的情况: 不能像使用嵌套线性布局并将方向设置为水平和重心时那样完美地居中对齐两个视图
    【解决方案2】:

    您需要将多个布局嵌套在一起。要在 RelativeLayout 中居中,您可以在子级上使用 android:layout_centerInParent="true"。如果你试图让几个孩子居中,他们最终会在彼此之下/之上。

    因此,例如,您可以使用具有两个视图的 LinearLayout 作为 RelativeLayout 的子视图,LinearLayout 具有 android:orientation="horizontal"android:layout_centerInParent="true"。现在,LinearLayout 应该在 RelativeLayout 中居中,两个子项彼此相邻。

    【讨论】:

    • 我真的在努力优化这个屏幕,因为它是主要活动。因此,我真的很想避免嵌套 LinearLayouts。我实际上从这个应用程序中删除了所有线性布局,因为它们效率极低。
    • 好吧,如果你不能嵌套布局,就没有办法(好看)。至少据我所知。
    【解决方案3】:

    将两个视图包装在一个 LinearLayout 中,然后像对单个 TextView 所做的那样,将 LinearLayout 在 RelativeLayout 中居中。

    【讨论】:

    • 不想嵌套。这仍然不能解释 centerInParent 在设置为 true 时有效,但在重力设置为 center_horizo​​ntal 时不起作用的问题
    • 在您的文本视图上尝试android:layout_gravity="center horizontal"
    • 没有。感谢您的回复,但这不起作用。我需要两个按钮并排放置,以便每个按钮的 center_horizo​​ntal 将它们放在一起。
    • 那么你需要嵌套布局。除非您尝试使用 layout_weight 嵌套视图,否则不会影响性能。
    • 实际上,您可以在父视图中居中,然后使用边距操作位置,如果您确定不嵌套布局,则将另一个文本视图与该文本视图对齐。
    【解决方案4】:

    所以我对这个问题的修复只是利用了 textview 的复合可绘制功能。我只是删除了按钮并使用 drawableRight 来显示搜索图标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      相关资源
      最近更新 更多