2016-08-01 91 views
1

我有一個RelativeLayout和六個元素,可以「隱藏」(View.GONE)如果一個數字是空的,爲了節省空間。當某些值變空時,我隱藏該號碼和該號碼的「標題」。所有的元素混合在屏幕上,你可以在這個圖像上看到: imageRelativeLayout和View.GONE問題(混合元素)

這是代碼:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/largeImageView" 
    android:id="@+id/containerLayout" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="@string/phone" 
     android:id="@+id/phoneTitleTextView" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_marginTop="20dp" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Text" 
     android:id="@+id/homePhoneTextView" 
     android:layout_below="@+id/phoneTitleTextView" 
     android:layout_alignParentLeft="true" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="@string/home" 
     android:id="@+id/homeTitleTextView" 
     android:layout_below="@+id/phoneTitleTextView" 
     android:layout_alignLeft="@+id/workTitleTextView" 
     android:layout_alignStart="@+id/workTitleTextView" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Text" 
     android:id="@+id/workPhoneTextView" 
     android:layout_below="@+id/homePhoneTextView" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="@string/work" 
     android:id="@+id/workTitleTextView" 
     android:layout_below="@+id/homeTitleTextView" 
     android:layout_alignLeft="@+id/mobileTitleTextView" 
     android:layout_alignStart="@+id/mobileTitleTextView" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Text" 
     android:id="@+id/mobilePhoneTextView" 
     android:layout_below="@+id/workPhoneTextView" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="@string/mobile" 
     android:id="@+id/mobileTitleTextView" 
     android:layout_alignTop="@+id/mobilePhoneTextView" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 
</RelativeLayout> 

我想我應該用LinearLayout中去,但是當我嘗試一下它得到最差。 在此先感謝!

回答

0

問題是,右列中的每個條目都依賴於它下面的條目來確定其左對齊。如果將底行或中間行設置爲GONE,突然間條目無法找到其下方的視圖,並且默認情況下一直向左排列。

我明白你爲什麼要這樣做,因爲「移動」是最長的字符串,你希望它們對齊到「移動」開始的位置,但這不是一個強有力的方法。例如,本地化可能會使「移動」不再是最短的字符串,並打破你的邏輯。

當我做出與此類似的佈局時,我通常會得到右列layout_alignParentLeft="true"中的元素,然後在其上放置一個大的左邊距。但是,這並不完全符合您所尋找的「基於右列中最大元素寬度的左對齊」行爲。我認爲T.M與TableLayout在正確的軌道上,儘管我沒有足夠的時間用它們來詳細說明。

0

可能會發生這種情況,因爲當視圖爲GONE時,就好像它尚未加載並且您正在使用layoutBelow屬性。

它可能不是您的問題的確切答案,但實現該方法的替代方法是use TableLayout,然後remove the TableRow at runtime

0

使用view.setVisibility(View.INVISIBLE)而不是GONE