web-dev-qa-db-ja.com

ビューの可視性がView.GONEの場合のRelativeLayoutの問題

私はRelativeLayoutを持っています:

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

TextViewは、Android:layout_belowで前のTextViewの下に固定されます。

問題は、TextView2が存在する場合と存在しない場合がある(View.VISIBLEまたはView.GONE); View.VISIBLEの場合はすべて問題ありませんが、View.GONEの場合、TextView3はTextView1の上にレンダリングされます。

これを修正するためにさまざまな方法を試してみましたが、毎回RelativeLayoutの「定義される前にidを参照することはできません」というルールによってキャッチされます。

ここで明らかな何かが欠けていることを願っています。

74
James

Linearviewにtextview 2および3を配置し、textview 1の下に線形レイアウトを保持できます。

40
Karan

次のタグを使用できます。

Android:layout_alignWithParentIfMissing="true"

ドキュメントから:

Trueに設定すると、レイアウト_toLeftOf、layout_toRightOfなどのアンカーが見つからない場合、親がアンカーとして使用されます。

180
ininprsr

textView2の可視性を更新するときに、TextView3のbelow属性を更新してみませんか? (コードでこれを行うと仮定します)

何かのようなもの

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);
10
slup

INVISIBLEまたはGONEを忘れて、代わりにこれを使用してください:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams();

params.height = 0;

params.setMargins(0,0,0,0);

view.setLayoutParams(params);
6
user925799

この答えはあなたの特定の問題を解決するのではなく、同様の問題を解決するので、うまくいけば誰かの助けになるでしょう。

相対レイアウトにTextView1に相当するものがない状況がありました。したがって、私の状況では、TextView2がGONEであった場合、TextView3を親の上部に揃えることが必要でした。 TextView3に属性Android:layout_alignWithParentIfMissing = "true"を追加することでそれを解決しました。 http://developer.Android.com/resources/articles/layout-tricks-efficiency.html をご覧ください。

残念ながら、親でない限り、代替の配置アンカーを指定する方法はありません。

6
Samuel Yang

あなたはこれを行うことができます

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

背景のないこのFrameLayoutの下にTextView3を配置します。したがって、TextView2がGoneの場合、スペースを占有しません。

3
Alittle927

すべてのtextViewをLinearLayoutの下に垂直方向に配置します。

<LinearLayout>
<TextView/>
<TextView/>
<TextView/>
<TextView/>
<TextView/>
<TextView/>
</LinearLayout>
0
Ashwini