LinearLayout使用权重参数对齐Textviews

时间:2016-11-16 14:57:17

标签: android android-layout

我有以下代码,这是我所拥有的列表视图的行布局。我想左边的标签和右边的数据。数据应该在左侧对齐,但此时它看起来很弯曲。

我试图为linearlayout中的textviews指定权重。标签的重量为1,数据的重量为5.我预计数据文本视图将垂直排列,因为它们占据水平宽度的5/6,标签为1/6。

为什么数据TextViews不能同等地占用相同数量的屏幕宽度?

在开发人员选项中,我检查了展示布局边界,并证明数据文本视图不会垂直排列。

<?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="match_parent"
    android:orientation="vertical"
    android:background="@color/white"

    android:paddingTop="10dp"
    android:paddingBottom="10dp">



    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

            <TextView
                    android:id="@+id/carerinfotypelabel"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Type: "
                    android:layout_weight="1"
                    android:textColor="@color/cf_blue"

                      />

                <TextView
                    android:id="@+id/carerinfotype"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"

                    android:layout_weight="5"

                      />

    </LinearLayout>


    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

                <TextView
                    android:id="@+id/carerinfosurnamelabel"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Name: "
                    android:layout_weight="1"
                    android:textColor="@color/cf_blue"

                      />

                <TextView
                    android:id="@+id/carerinfosurname"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="5"
                     android:layout_below="@id/carerinfotypelabel"
                     />


        </LinearLayout>



    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

                   <TextView
                        android:id="@+id/carerinfoaddresslabel"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Address: "
                       android:layout_weight="1"
                       android:textColor="@color/cf_blue"
                          />

                    <TextView
                        android:id="@+id/carerinfoaddress"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"

                        android:layout_weight="5" />


        </LinearLayout>



    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

                    <TextView
                        android:id="@+id/carerinfopostcodelabel"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Postcode: "
                        android:layout_weight="1"
                        android:textColor="@color/cf_blue"
                          />

                     <TextView
                        android:id="@+id/carerinfopostcode"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                         android:layout_weight="5" />

        </LinearLayout>




    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">


                     <TextView
                        android:id="@+id/carerinfomobilelabel"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Mobile: "
                         android:layout_weight="1"
                         android:textColor="@color/cf_blue"
                          />

                    <TextView
                        android:id="@+id/carerinfomobile"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_weight="5"

                          />


        </LinearLayout>


    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">


         <TextView
            android:id="@+id/carerinfotelhomelabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Home Tel: "
             android:layout_weight="1"
             android:textColor="@color/cf_blue"
              />

        <TextView
            android:id="@+id/carerinfotelhome"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="5"

              />

        </LinearLayout>



    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">


                <TextView
                    android:id="@+id/carerinfotelno1label"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Tel 1: "
                    android:layout_weight="1"
                    android:textColor="@color/cf_blue"
                     />


                <TextView
                    android:id="@+id/carerinfotelno1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"

                    android:layout_weight="5" />


        </LinearLayout>



    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

                 <TextView
                    android:id="@+id/carerinfotel2label"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Tel 2: "
                     android:layout_weight="1"
                     android:textColor="@color/cf_blue"
                     />

                <TextView
                    android:id="@+id/carerinfotel2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="5"
                     />

        </LinearLayout>


    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">


                <TextView
                    android:id="@+id/carerinfotel3label"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                     android:text="Tel 3: "
                    android:layout_weight="1"
                    android:textColor="@color/cf_blue"/>

                <TextView
                    android:id="@+id/carerinfotel3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="5"/>


        </LinearLayout>




    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">


                    <TextView
                        android:id="@+id/carerinfotel4label"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Tel 4: "
                        android:layout_weight="1"
                        android:textColor="@color/cf_blue"/>




                    <TextView
                        android:id="@+id/carerinfotel4"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_weight="5" />


        </LinearLayout>




    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

                    <TextView
        android:id="@+id/carerinforelationshiplabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Relationship: "
                        android:layout_weight="1"
        android:textColor="@color/cf_blue"
        />


        <TextView
            android:id="@+id/carerinforelationship"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:layout_weight="5"
            />

        </LinearLayout>




    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">


                    <TextView
        android:id="@+id/carerinfodoblabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="DOB: "
                        android:layout_weight="1"
        android:textColor="@color/cf_blue"
        />


        <TextView
            android:id="@+id/carerinfodob"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:layout_weight="5"
            />



        </LinearLayout>



    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">


                           <TextView
                            android:id="@+id/carerinfopinlabel"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                             android:text="PIN: "
                               android:layout_weight="1"
                            android:textColor="@color/cf_blue"
                             />


                           <TextView
                            android:id="@+id/carerinfopin"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"

                               android:layout_weight="5"
                             />


     </LinearLayout>



</LinearLayout>

2 个答案:

答案 0 :(得分:0)

由于layout_width="wrap_content",每个子视图的左侧文本视图都没有对齐。他们首先根据他们的内容占用空间,之后weight属性提供更多空间,这也可能有所不同。 layout_weight属性用于指示剩余空间如何在LinearLayout的视图中使用。你可以在这做两件事。

对于每个子行,将两个文本视图的layout_width设为0dp。这意味着整个宽度是剩余空间,并且仅对每个将保持一致的子行由weight进行给出空间的计算。

或者您可以手动将每个文本视图的width定义为相等(例如40dp)。

答案 1 :(得分:-1)

你需要指定android:weightSum =&#34; 6&#34;在你的所有水平布局中。 这个属性告诉android分离6个部分的容器,然后用android:layout_weight你告诉android一个元素必须适合多少部分。

另一件事:当你设置android:layout_weight时,你必须在相应的width或height属性上设置0dp。否则可能会出错

一个例子

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:weightSum="6">


        <TextView
            android:id="@+id/carerinfodoblabel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="DOB: "
            android:layout_weight="1"
            android:textColor="@color/cf_blue" />


        <TextView
            android:id="@+id/carerinfodob"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="5" />

  </LinearLayout>