반응형

안드로이드 레이아웃 XML의 android:visibility 속성은 View를 보이거나 사라지게 하는 역할을 하며 3가지 상태(visible, invisible, gone)가 있습니다.

 

디폴트는 visible이라서 별도로 아래처럼 명시하지 않더라도 View는 보이게 됩니다.

다른 2가지 상태인 invisible과 gone은 View를 사라지게 합니다.

다만 이 둘의 차이는 invisible은 View 공간을 유지하면서 사리지고, gone은 View 공간을 유지하지 않고 사라집니다.

 

이게 무슨 의미가 있겠냐 싶지만 분명히 존재의 의미가 있고 필요하다는 것을 아래 예를 들어보도록 하겠습니다.

 

먼저 간단하게 아래와 같이 이미지 버튼으로 4개와 1개의 텍스트 뷰로 구성된 ConstraintLayout을 만들었습니다.

가운데 3개의 이미지 버튼들은 Spread 스타일의 Chain으로 만들어져 있습니다.

위쪽 이미지 버튼과 아래쪽 텍스트 뷰의 경우 각각 가운데 이미지 버튼들과 가장자리 위치의 중간되는 곳에 위치하고 있습니다.

 

정중앙 버튼의 android:visibility 속성을 invisible과 gone으로 변경해서 테스트해보겠습니다.

관찰 포인트는 가로로 버튼들이 균등하게 위치 여부,

                  상단 이미지 버튼과 하단의 텍스트뷰의 원래 위치 유지 여부 입니다.

 


#테스트 1 (android:visibility="invisible" 로 설정한 경우)

아래 왼쪽 그림에 정중간 버튼이 사라진 것이 확인되고, 오른쪽 그림(Blueprint)에는 정중간 버튼이 공간을 유지하고 있는 것이 확인됩니다. 다른 뷰와의 연결도 문제가 없고, 모든 뷰들의 위치도 동일합니다.

다만, 가운데 이미지 버튼들이 하나 사라졌음에도 나머지 2개의 버튼들이 다시 정렬되어서 균등하게 위치되지 않고 원래 자리를 유지하고 있습니다.

용도: 다른 뷰의 위치와 크기에 영향을 주지 않고 사라지게 할 목적인 경우에 유용


#테스트 2 (android:visibility="gone" 으로 설정한 경우)

마찬가지 중간 버튼이 사라졌지만, 오른쪽 그림(Blueprint)에는 원래 자리를 차지하고 있던 위치에 공간이 제거되었으며 다른 뷰들의 위치가 조금씩 이동된 것이 확인됩니다.

위치가 변경되면 안되는 상단의 이미지 버튼과 하단의 텍스트 뷰까지 조금씩 위치가 바뀌었습니다. (마지막에 추가 설명)

그렇지만, 가운데 이미지 버튼들의 경우 남아있던 나머지 2개가 다시 정렬되면서 균등하게 위차하고 있습니다.

용도: 사라지는 뷰와 연동해서 다른 뷰들의 위치나 크기 조절이 필요한 경우에 유용

상단의 이미지 버튼과 하단의 텍스트 뷰의 경우 위치가 이동이 되었는데 이유는 아래 그림을 참조하시면 됩니다.

정중앙 버튼(id=>imageButtonCenter)의 Bottom과 Parent의 Bottom 간의 중앙에 위치하도록 되어 있는데, 정중앙 버튼이 사라지면서 공간도 제거되고 연결된 것도 우측 이미지 버튼의 가운데를 가르키면서 전체적으로 위쪽으로 조금씩 이동하게 된 것입니다.

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Are you ready?"
    android:textAppearance="@style/TextAppearance.AppCompat.Large"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/imageButtonCenter" />

 

이제 어떤 경우에 View의 invisible 또는 gone을 사용하는지 이해가 되셨을 것으로 생각됩니다.

이번 글은 여기까지입니다. 읽어주셔서 감사합니다.

+ Recent posts