2015-06-19 101 views
1

我一直在處理一個應用程序,顯示有關服務器的狀態。每個服務器都有一個CardView,裏面有一個RelativeView。左邊是一張圖像,與左側的卡片對齊。在中間,我有一個TextView,與圖像對齊。在右側,我有一個TextView,與卡右側對齊。使2個動態TextView不重疊

基本上,我的問題是,沒有使用LinearLayout,我怎樣才能使它中間TextView不重疊正確的TextView,最好在佈局的XML?兩個視圖中的文本都是動態的,使得LinearLayout不是非常可取的。

Here是一個佈局圖,幫助您瞭解我正在談論的內容。對不起,外部鏈接,這是後來重新格式化。

+0

也許爲每個'TextView'定義一個固定的寬度,或者你可以參考這個:http://stackoverflow.com/questions/16017165/auto-fit-textview-for-android –

+0

水平居中一個視圖,並使用它是使用layout_toLeftOf和layout_toRightOf來保持視圖不通過該閾值/重疊的視圖的閾值 – zgc7009

回答

0

我想通了,如何做到這一點編程。簡單地說,您想從容器視圖的大小中減去周圍視圖的寬度和填充,並將剩餘值設置爲文本視圖的寬度。這裏有一個例子:

int view_length = personViewHolder.container.getWidth() - personViewHolder.container.getPaddingStart() - personViewHolder.container.getPaddingEnd(); 
    view_length = view_length - personViewHolder.object_to_left.getWidth() - personViewHolder.object_to_left.getPaddingStart() -personViewHolder.object_to_left.getPaddingEnd(); 
    view_length = view_length - personViewHolder.object_to_right.getWidth() - personViewHolder.object_to_right.getPaddingStart() - personViewHolder.object_to_right.getPaddingEnd(); 
    personViewHolder.view_to_set_width.getLayoutParams().width = view_length; 
    personViewHolder.view_to_set_width.invalidate(); 
0

1.將中間的TextView連接到父級的中心水平,給出固定寬度,左右邊距。通過使用layout_toLeftOf提到另一個TextView是正確的。 2.通過使用alignRightToParent = true,將右側的TextView右對齊。然後給它左邊緣。

我嘗試用下面的XML代碼:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="250dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="@+id/sun" 
    android:background="#004700" > 

    <TextView 
     android:layout_width="80dp" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_marginRight="20dp" 
     android:layout_toLeftOf="@+id/sun12" 
     android:singleLine="false" 
     android:text="abcdgsss ssssssssssssssss ssssssss sssssssssssssssssssssss" 
     android:textColor="#fff" 
     android:textSize="16sp" /> 

    <TextView 
     android :id="@+id/sun12" 
     android:layout_width="80dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_marginLeft="10dp" 
     android:text="abcdgsss ssssssssssssssss ssssssss sssssssssssssssssssssss" 
     android:textColor="#fff" 
     android:textSize="16sp" > 
    </TextView> 
</RelativeLayout> 
+0

此方法使所有內容都位於視圖中,而不是位置應該位於的位置,如果中間文本視圖中的文本混亂比1行長。 – StaticShadow

0

您可以將在RelativeLayout的意見(如果他們已經不在一個),然後,使用ToStartOfToEndOf屬性對準其中的一個的開始或結束其他。您也可以使用ToLeftOfToRightOf,但不建議這樣做,因爲在某些語言環境中,用戶需要從右向左閱讀而不是從左向右閱讀。這將確保兩個視圖不會重疊(假設您沒有在任一視圖上放置負邊距)。只要您正確配置其對齊屬性,就可以根據需要將其擴展到儘可能多的視圖。

+0

我已經給了這個答案2次,並表示它不適用於我的應用程序。請不要重複答案,特別是在反駁之後。感謝您盡力幫助。 – StaticShadow

+0

此答案可能類似於您收到的答案(和評論),但它不相同。我只是告訴你,如果你正確地格式化XML,使用我(和其他人)提到的屬性,並且使用相對佈局作爲父視圖組,則不應該有重疊的視圖。這可能意味着你必須改變你的XML的其他部分,但以目前的方式來說,我們所能做的只是指向一些能夠避免佈局重疊的東西。如果你想要新的答案,也許你應該發佈你的XML。 – ryguy