2016-07-31 110 views
2

我有圖像和文本元素的視圖。其中一些是動態的,所以我想將它們分組在一個「容器」(線性佈局也許?)中,所以當它們中的一些不存在時,下面的元素可以具有20dp的餘量,而不是大的空白。Android佈局:組動態元素

這是佈局:

image layout

我的代碼: (我想組:phoneTitleTextView,homePhoneTextView和homeTitleTextView)

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 


    <ImageView 
     android:id="@+id/largeImageView" 
     android:layout_width="120dp" 
     android:layout_height="120dp" 
     android:scaleType="centerCrop" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="@string/name" 
     android:id="@+id/contactTitleTextView" 
     android:layout_toRightOf="@+id/largeImageView" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="10dp" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Text" 
     android:id="@+id/contactNameTextView" 
     android:layout_below="@+id/contactTitleTextView" 
     android:layout_toRightOf="@+id/largeImageView" 
     android:layout_toEndOf="@+id/largeImageView" 
     android:layout_marginLeft="10dp"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="@string/company" 
     android:id="@+id/companyTitleTextView" 
     android:layout_above="@+id/companyTextView" 
     android:layout_alignLeft="@+id/contactNameTextView" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Text" 
     android:id="@+id/companyTextView" 
     android:layout_alignBottom="@+id/largeImageView" 
     android:layout_alignLeft="@+id/contactNameTextView" 
     android:layout_alignStart="@+id/contactNameTextView" /> 

    <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_below="@+id/largeImageView" 
     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_alignTop="@+id/homePhoneTextView" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="@string/address" 
     android:id="@+id/addressTitleTextView" 
     android:layout_below="@+id/homePhoneTextView" 
     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/address1TextView" 
     android:layout_below="@+id/addressTitleTextView" 
     android:layout_alignParentLeft="true" 
     /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Text" 
     android:id="@+id/address2TextView" 
     android:layout_below="@+id/address1TextView" 
     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/birthday" 
     android:id="@+id/birthdayTitleTextView" 
     android:layout_below="@+id/address2TextView" 
     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/birthdayTextView" 
     android:layout_below="@+id/birthdayTitleTextView" 
     android:layout_alignParentLeft="true" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="@string/email" 
     android:id="@+id/emailTitleTextView" 
     android:layout_below="@+id/birthdayTextView" 
     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/emailTextView" 
     android:layout_below="@+id/emailTitleTextView" 
     android:layout_alignParentLeft="true" /> 

    <ImageView 
     android:id="@+id/starImageView" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:scaleType="centerCrop" 
     android:layout_alignTop="@+id/contactTitleTextView" 
     android:layout_alignRight="@+id/homeTitleTextView" 
     android:layout_alignEnd="@+id/homeTitleTextView" /> 
</RelativeLayout> 

當我嘗試用RelativeLayout的做我所有的元素混合在一起。

提前致謝!

+0

你提到了linearlayout,你試過了嗎? – wanpanman

回答

2

使用RelativeLayout您必須指定每個視圖相對到另一個的位置。例如,放置phone_02_title下面phone_01_title您將使用屬性below這樣的:

<RelativeLayout 
    ...> 

    <TextView 
     android:id="@+id/phone_01_title" 
     ... 
     /> 

    <TextView 
     android:id="@+id/phone_02_title" 
     android:layout_below="@+id/phone_01_title" 
     ... 
     /> 

    ... 

</RelativeLayout> 

無論如何,如果你想要的是設置「電話」和「地址」組之間的緣,我建議你使用android:paddingBottom="" 。這會在列表下方放置一個空格,而與組的行數無關。

如果你想爲缺少的視圖留下一個「空閒空間」(假設你有2/5個電話),我寧願爲容器和行設置一個固定的高度。例如,每個TextView的高度爲40dp,容器的容量爲200dp(5x40dp)。

最後但並非最不重要的一點,如果您知道它們將介於1到5之間,我還建議您對視圖使用「setVisibility」,而不是動態添加它們。在XML佈局中設置所有5個視圖,然後,以編程方式使用view.setVisibility(View.VISIBLE)view.setVisibility(View.INVISIBLE)來顯示/隱藏它們的內容(但不是它們的高度)。

希望這可以幫助你!

+1

謝謝!解決了我的問題,並感謝SetVisibility的建議,我會使用它! – emboole

+1

非常高興我可以幫助:) – josemigallas