Android布局:组动态元素

时间:2016-07-31 15:56:09

标签: android android-layout layout

我有图像和文本元素的视图。其中一些是动态的,所以我想将它们分组到一个“容器”(线性布局可能?),所以当它们中的一些不存在时,下面的元素可能有20dp的边距,而不是一个大的空白区域。

这是布局:

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时,我的所有元素都会混合在一起。

提前致谢!

1 个答案:

答案 0 :(得分:2)

使用RelativeLayout您必须指定每个View relative 的位置。例如,要将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>

无论如何,如果您想要的是在&#34;电话&#34;之间设置一个保证金。和&#34;地址&#34;小组,我建议你使用android:paddingBottom=""。这会在列表下方放置一个空格,与该组的行数无关。

如果你想留下一个&#34;免费空间&#34;对于缺失的视图(让我们说你有2/5个手机)我宁愿为容器和行设置一个固定的高度。例如,每个TextView的高度为40dp,容器为200dp(5x40 dp)。

最后但同样重要的是,我还建议您使用&#34; setVisibility&#34;对于视图而不是动态添加它们,前提是您知道它们将在1到5之间。在XML布局中设置所有5个视图,然后以编程方式使用view.setVisibility(View.VISIBLE)view.setVisibility(View.INVISIBLE)来显示/隐藏他们的内容(但不是他们的身高)。

希望这对你有所帮助!