Android相对布局中心的每一个元素

时间:2015-03-30 18:16:20

标签: android xml android-layout

我在选项卡式布局中编写了一个片段,如下所示:

enter image description here

我想将所有内容(按钮,editTextes和textViewes)放在屏幕中央。我对Android很新,所以我的问题是:我可以创建一个包含所有内容并垂直居中的“盒子”(就像我用蓝色绘制的那个盒子)吗?

enter image description here

在上图中,您可以看到我需要的东西。在这里,您可以找到XML代码。

 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="20dp"
    android:gravity="center"
    android:text="@string/rad_grad"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="#26D50D" />

<EditText
    android:id="@+id/editText1"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_centerInParent="true"
    android:layout_below="@+id/textView2"
    android:layout_marginTop="20dp"
    android:hint="@string/hint1"
    android:ems="10" >

</EditText>

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/editText1"
    android:layout_below="@+id/editText1"
    android:layout_marginTop="20dp"
    android:textSize="15dp"
    android:text="@string/convert" />

<EditText
    android:id="@+id/editText2"
    android:layout_width="150dp"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/button1"
    android:layout_centerInParent="true"
    android:gravity="center"
    android:layout_toRightOf="@+id/button1"
    android:layout_marginLeft="20dp"
    android:ems="10"
    android:editable="false" >

    <requestFocus />
</EditText>

<View
    android:id="@+id/sepbar"
    android:layout_width="fill_parent"
    android:layout_height="1dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_alignParentLeft="true"
    android:layout_centerInParent="true"
    android:layout_below="@+id/button1"
    android:layout_marginTop="50dp"
    android:background="@android:color/darker_gray" />

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_marginTop="40dp"
    android:gravity="center"
    android:text="@string/grad_rad"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="#26D50D"
    android:layout_below="@+id/sepbar" />

<EditText
    android:id="@+id/editText3"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_centerInParent="true"
    android:layout_marginTop="20dp"
    android:hint="@string/hint2"
    android:ems="10"
    android:layout_below="@+id/textView3" />

 <Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/editText3"
    android:layout_below="@+id/editText3"
    android:layout_marginTop="20dp"
    android:textSize="15dp"
    android:text="@string/convert" />

<EditText
    android:id="@+id/editText4"
    android:layout_width="150dp"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:layout_alignBottom="@+id/button2"
    android:layout_toRightOf="@+id/button2"
    android:layout_marginLeft="20dp"
    android:ems="10"
    android:editable="false"
    android:gravity="center" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:text="@string/devname"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:gravity="center" />

2 个答案:

答案 0 :(得分:1)

尝试将相对布局包装在垂直的Linearlayout中 <击>

<击>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <!-- top view -->
    <RelativeLayout  
        android:layout_gravity="center"
        android:gravity="center" />

    <!-- bottom view -->
    <Relative2>

</LinearLayout>

<击> 更新:仔细查看布局后,它应该可以正常工作。删除sepbar上的LayoutBelow并将组件基于其上方和下方。

<View
    android:id="@+id/sepbar"
    android:layout_width="fill_parent"
    android:layout_height="1dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_alignParentLeft="true"
    android:layout_centerInParent="true"
 --> Remove me   android:layout_below="@+id/button1"
    android:layout_marginTop="50dp"
    android:background="@android:color/darker_gray" />

我不再使用相对布局了,当我这样做时会有特定的情况,但我通常会发现自己使用更多线性布局来做这样的事情。相对可能是一个令人头痛的问题。

答案 1 :(得分:1)

你可以使用垂直方向的LinearLayout ....主要的是&#34;概念&#34;你在上面提供的布局最好与linearlayout而不是relativelayout一起使用,因为在relativelayouts中我们有很多由于id改变而产生的连锁反应......而且上面的布局是单调的类型&#34; vertical&#34; ...根据我的经验,我喜欢使用relativelayout,当我的中心位置像熊一样无序布局,然后左上方有一只鸟,右侧中心对齐一对球......

这里的蓝色布局是代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:android:gravity="center"
      android:orientation="vertical">

      <TextView
           android:layout_width="wrap_content" <!--(hear you can imagine like this if you give wrap content then linearlayout gravity will be used but if you use match_parent then u will have to use gravity here else android default ltr gravity will be used )-->
           android:layout_height="wrap_content"
           android:text="Radianti..."/>
      <EditText
           android:layout_width="match_parent"<!--(im using match_parent because its going to be this edittext child which needs gravity so the parent linearlayout gravity wont work on this edittext contents {child})-->
           android:layout_height="wrap_content"
           android:android:gravity="center"
           android:text="my edit text content..."/>

           <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:android:gravity="center"
             android:orientation="horizontal"<!--note this it will place itself vertically in parent now we can place its child contents horizontally-->
             >
              <Button
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:text="button"/>
              <EditText
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:android:gravity="center"
                  android:text="another etx"/>
             <!-- you can use layout_weight in linearlayout to give width in percentage value ranges from 0 1 i guess decimal is allowed i used like 0.4 and 0.6 so it means 40 percent and 60 percent you can read about it more... -->
         </LinearLayout>
 </LinearLayout>

希望这能帮助你建立理念:)

由于