查看可见性为View.GONE时,使用RelativeLayout进行发布

我有一个RelativeLayout因此:

 <RelativeLayout> <TextView1/> <TextView2/> // <-- View.VISIBLE OR View.GONE <TextView3/> <TextView4/> </RelativeLayout> 

每个TextView都使用android:layout_below固定在以前的TextView下面。

问题是,TextView2可能会或可能不会在那里( View.VISIBLEView.GONE ); 如果它是View.VISIBLE ,那么一切都很好,但如果它是View.GONE ,那么TextView3最终将被渲染在TextView1之上。

我已经尝试了各种方法来解决这个问题,但是每次我都被RelativeLayout ''定义'规则之前不能引用一个id'。

我希望我在这里错过了一些明显的东西。

您可以将textview 2和3放置在LinearLayout中,并将线性布局保留在textview 1下方。

你可以使用这个标签:

 android:layout_alignWithParentIfMissing="true" 

从文档:

如果设置为true,当无法findlayout_toLeftOf,layout_toRightOf等的锚点时,父级将用作锚点。

为什么不更新TextView3的below属性,当你更新TextView2的可见性? (我假设你在代码中这样做)

就像是

 TextView tv = (TextView) findViewById(R.id.textview3); RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) tv.getLayoutParams(); lp.addRule(RelativeLayout.BELOW, R.id.textview1); ((TextView) view).setLayoutParams(lp); 

这个答案并没有解决你的具体问题,但确实解决了类似的问题,所以希望这将有助于某人。

我有一种情况,我的相对布局没有相当于TextView1。 所以,在我的情况下,如果TextView2是GONE,那么我希望TextView3与父级的顶端alignment。 我通过向TextView3添加属性android:layout_alignWithParentIfMissing =“true”来解决这个问题。 请参阅http://developer.android.com/resources/articles/layout-tricks-efficiency.html

不幸的是,我没有看到一种方法来指定一个替代的alignment锚点,除非它是父类。

忘记INVISIBLEGONE ,用这个代替:

 RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams(); params.height = 0; params.setMargins(0,0,0,0); view.setLayoutParams(params); 

如果你没有被迫使用RelativeLayout :改为使用LinearLayout