[android] 뷰 가시성이 View.GONE 인 경우 RelativeLayout 문제

나는 RelativeLayout따라서 :

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

각각은 TextView이전 아래에 정박 TextViewandroid:layout_below.

문제는 TextView2가있을 수도 있고 없을 수도 있다는 것입니다 ( View.VISIBLE또는 View.GONE). 이면 View.VISIBLE모두 괜찮지 View.GONE만이면 TextView3은 TextView1 위에 렌더링됩니다.

이 문제를 해결하기 위해 다양한 방법을 시도했지만 매번 RelativeLayout‘ID가 정의되기 전에는 ID를 참조 할 수 없습니다’라는 규칙에 의해 포착됩니다 .

나는 여기서 명백한 것을 놓치고 있기를 바랍니다.



답변

LinearLayout에 textview 2와 3을 배치하고 선형 레이아웃을 textview 1 아래에 유지할 수 있습니다.


답변

다음 태그를 사용할 수 있습니다.

android:layout_alignWithParentIfMissing="true"

문서에서 :

true로 설정하면 layout_toLeftOf, layout_toRightOf 등에 대한 앵커를 찾을 수 없을 때 부모가 앵커로 사용됩니다.


답변

belowTextView2의 가시성을 업데이트 할 때 TextView3 의 속성을 업데이트하지 않는 이유 는 무엇입니까? (나는 이것을 코드로 가정한다)

뭔가

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이 부모의 상단에 정렬되기를 원했습니다. TextView3에 android : layout_alignWithParentIfMissing = “true”속성을 추가하여이 문제를 해결했습니다. http://developer.android.com/resources/articles/layout-tricks-efficiency.html을 참조 하십시오 .

불행히도 부모가 아닌 경우 대체 정렬 앵커를 지정하는 방법이 없습니다.


답변

INVISIBLE또는 은 잊어 버리고 GONE대신 다음을 사용하십시오.

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

params.height = 0;

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

view.setLayoutParams(params);


답변

넌 할 수있어

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

배경이없는이 FrameLayout 아래에 TextView3을두기 때문에 TextView2가 Gone이면 공간을 차지하지 않습니다.


답변

모든 textView를 수직 방향으로 LinearLayout 아래에 배치하십시오.

<LinearLayout>
<TextView/>
<TextView/>
<TextView/>
<TextView/>
<TextView/>
<TextView/>
</LinearLayout>