Android布局:组动态元素
我有图像和文本元素的视图。其中一些是动态的,所以我想将它们分组在一个“容器”(线性布局也许?)中,所以当它们中的一些不存在时,下面的元素可以具有20dp的余量,而不是大的空白。Android布局:组动态元素
这是布局:
我的代码: (我想组: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的做我所有的元素混合在一起。
提前致谢!
使用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)
来显示/隐藏它们的内容(但不是它们的高度)。
希望这可以帮助你!
谢谢!解决了我的问题,并感谢SetVisibility的建议,我会使用它! – emboole
非常高兴我可以帮助:) – josemigallas
你提到了linearlayout,你试过了吗? – wanpanman