我有一个RelativeLayout和六个可以"隐藏" (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 :(得分:0)
可能会发生这种情况,因为当视图为GONE
时,就好像它尚未加载并且您使用的是layoutBelow
属性。
这可能不是您问题的准确答案,但实现这一目标的另一种方法是use TableLayout
然后remove the TableRow
at runtime。
答案 1 :(得分:0)
问题是右列中的每个条目都取决于它下面的条目以确定其左对齐。如果您将底行或甚至中间行设置为GONE
,则突然该条目无法在其下方找到该视图,并且默认情况下会一直向左对齐。
我理解为什么你这样做,因为&#34;移动&#34;是最长的字符串,你希望它们与#34; Mobile&#34;开始,但这不是一个强有力的方法。例如,本地化可以使&#34; Mobile&#34;不再是最短的字符串,而是打破你的逻辑。
当我制作类似于此的布局时,我通常最终会在右列layout_alignParentLeft="true"
中放置元素,然后在其上放置一个大的左边距。但是,根据右栏中最大元素的宽度,并没有完全实现左对齐#34;你正在寻找的行为。我认为T.M与TableLayout走在了正确的轨道上,尽管我自己还没有充分利用它们来了解具体细节。
答案 2 :(得分:0)
使用view.setVisibility(View.INVISIBLE)而不是GONE