2016-11-16 66 views
0

我有以下的代碼,這是我有一個列表視圖的行佈局。我希望標籤位於左側,數據位於右側。數據應該在左側對齊,但目前看起來是歪斜的。LinearLayout對齊Textviews使用重量參數

我曾嘗試在linearlayout中爲文字指定權重。該標籤的權重爲1,數據的權重爲5.我預計數據文字視圖會垂直排列,因爲它們應該佔據水平寬度的5/6,只剩下標籤的1/6。

爲什麼數據TextViews不是同樣佔用了屏幕寬度的一樣多嗎?

在開發人員選項我檢查了展會的佈局界限,它證明了數據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> 
+0

因爲'wrap_content' – njzk2

回答

-1

您需要在所有水平佈局中指定android:weightSum =「6」。 此屬性告訴android將單獨的容器分成六部分,然後用android:layout_weight告訴android一個元素必須適合多少個部分。

另一件事:當你設置的android:layout_weight必須設置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> 
+0

不,你沒有。佈局知道OP要求的是1 + 5 = 6. – njzk2

+0

,「0dp」是寬度是正確的答案,但它絕不是強制性的。有很多情況下,設置'wrap_content'或者一個固定值是完全有效的。 – njzk2

+0

@ njzk2固定值如何與layout_weigth一起使用? – firegloves

0

每個子行的左textviews不對齊,因爲layout_width="wrap_content"起來。他們都根據其內容首先佔用空間,然後由weight提供更多的空間,這些空間也會有所不同。 layout_weight屬性用於指示剩餘空間如何留在LinearLayout的視圖中使用。你可以在這裏做兩件事。

要麼使雙方textviews爲0dp爲每個子行的layout_width。這意味着整個寬度是剩餘空間,並且僅在每個子行將保持一致的情況下通過weight完成給予空間的計算。

或者你也可以手動定義爲相等(對於如40dp)每TextView中的width