我有一个包含一对并排按钮的RelativeLayout,我希望它在布局中居中。我可以将按钮放在LinearLayout中并将其放在RelativeLayout中,但我希望尽可能保持我的xml干净。
这是我尝试过的,这只是将“应用”按钮放在中间,将“撤消”按钮放在左侧:
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15sp">
<TextView
android:id="@+id/instructions"
android:text="@string/instructions"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="15sp"
android:layout_centerHorizontal="true"
/>
<Button
android:id="@+id/apply"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/apply"
android:textSize="20sp"
android:layout_below="@id/instructions"
/>
<Button
android:id="@+id/undo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/undo"
android:textSize="20sp"
android:layout_toLeftOf="@id/apply"
android:layout_below="@id/instructions"
/>
</RelativeLayout>
答案 0 :(得分:61)
android:gravity
会将内容与view
或layout
内的内容对齐。
android:layout_gravity
会将view
或layout
与其父母内部对齐。
所以添加
android:gravity="center"
你的RelativeLayout应该做的伎俩...
像这样:
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="15sp">
</RelativeLayout>
答案 1 :(得分:9)
这是BrainCrash答案的扩展。它是一个非嵌套选项,可以水平和垂直地对所有三个进行分组和居中。此外,它采用顶部TextView并在两个按钮上水平居中。如果需要,您可以使用android:gravity =“center”将文本置于TextView中心。我还删除了边距,添加了颜色,并将RelativeLayout高度设置为fill_parent以突出显示布局。在API 11上测试。
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:background="@android:color/black"
>
<TextView
android:id="@+id/instructions"
android:text="TEST"
android:textSize="20sp"
android:background="@android:color/darker_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignLeft="@+id/undo"
android:layout_alignRight="@+id/apply"
android:gravity="center"
/>
<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"
android:layout_below="@id/instructions"
/>
<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_toLeftOf="@id/apply"
android:layout_below="@id/instructions"
/>
</RelativeLayout>
答案 2 :(得分:5)
android:layout_gravity="center"
几乎可以提供你正在寻找的东西。
答案 3 :(得分:4)
以上是上述答案的组合,解决了我的具体情况:
在布局中居中两个单独的标签,其中还包括同一布局最左侧位置的按钮(按钮,标签,标签,从左到右,标签相对于包含所有三个视图的布局居中)也就是说,按钮不会将标签推离中心位置。
我通过嵌套两个RelativeLayout来解决这个问题,其中最外面的布局包括了 按钮和内部相对布局。
Inner-RelativeLayout包含两个文本标签(TextView)。
这是一个片段,提供了如何完成居中和其他布局的详细信息:
请参阅:RelativeLayout Gravity not applied?和 Gravity and layout_gravity on Android 重力和layout_gravity之间的区别。
调整btn_button1按钮上的paddingLeft,看看TextView不会移动。
(对于downvotes我道歉。我太匆忙地认为你的建议没有解决问题的确切问题,他们确实有助于解决非常类似的情况(这里的答案解决了一个问题)非常具体的情况,只有所有这些答案的组合解决了我的问题。我尝试了upvoting,但它不会让我,除非我编辑答案,我不想这样做。)
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rl_outer"
android:layout_width="fill_parent"
android:layout_height="50dip"
android:background="#FF0000FF">
<Button
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/btn_button1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:background="#FF00FF00"
android:text="<"
android:textSize="20sp"
android:paddingLeft="40dip"/>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rl_inner"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:background="#FFFF00FF"
android:layout_centerInParent="true"
android:gravity="center">
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv_text1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:background="#FF505050"
android:textSize="20sp"
android:textColor="#FFFFFFFF"
android:text="Complaint #"
android:gravity="center"/>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv_text2"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:background="#FF505050"
android:textSize="20sp"
android:textColor="#FFFFFFFF"
android:layout_toRightOf="@id/tv_text1"
android:gravity="center"/>
</RelativeLayout>
</RelativeLayout>
答案 4 :(得分:2)
LinearLayout
是个不错的选择。除此之外,还有一些选项,比如创建一个不可见的视图和中心,然后将左边的按钮左右对齐。但这些只是解决方法。