RelativeLayout和View.GONE问题(混合元素)

时间:2016-08-01 02:40:09

标签: android android-linearlayout android-relativelayout

我有一个RelativeLayout和六个可以"隐藏" (View.GONE)如果数字为空,以节省空间。当某个值变为空时,我会隐藏数字和"标题"这个数字。屏幕上会混合所有元素,如下图所示: image

这是代码:

<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,但是当我尝试它时会变得更糟。 提前谢谢!

3 个答案:

答案 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