2015-03-30 80 views
0

我曾在一个标签式的布局,看起来像这样写的片段元素:Android的相对布局中心每

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" /> 

回答

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

你可以在垂直方向上使用LinearLayout ....主要的是你上面提供的布局更适合用于linearlayout而不是relativelayout,因为在相关布局中我们有很多由id变化引起的涟漪效应...和上面的布局是单调的类型“垂直”...从我的经验来看,我更喜欢使用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> 

何PE这将帮助你建立概念:)

谢谢