[Android] FrameLayout의 사용(안드로이드 : 프레임레이아웃의 사용)

FrameLayout을 사용한 간단한 예제입니다.


우선 FrameLayout에 대한 기본적인 것들을 알아봅니다.

FrameLayout에서 알아두어야 할 2가지
 - 여러 레이아웃, 위젯을 하나의 레이아웃(FrameLayout) 안에, 겹쳐서 사용할 수 있다.
 - 위에서 부터 아래로 코딩되었을 때, 아래 코딩된 레이아웃, 위젯이 위에 보여진다. 

겹쳐서 사용할수있다는것과, 아래 코딩된 녀석이 위에 보여진다는 것. 이 두가지만 알면 FrameLayout을 사용해서 다양한 뷰를 만들 수 있습니다.


여기서는 겹쳐진다는 것을 바탕으로 한 내용을 이야기 할 것입니다.
아래는 두개의 LinearLayout을 겹쳐놓고, 버튼의 클릭에 따라서 다른 레이아웃을 보여주는 예제입니다.




 frame_layout_example_activity.xml - 레이아웃의 작성




이렇게 코딩된 레이아웃은 아래와 같이 보일것입니다.


그리고 코드와 보여지는 뷰를 매칭시켜보면 아래와 같습니다.

(가장 부모인 LinearLayoutorientation의 값이 vertical이다.)

실제로 영역이 어떤식으로 나누어지고  어떤 값들을 주었을때, 얼마만큼의 영역을 차지하는지를  알고 있다면,
영역을 잘 설계하는 것만으로도 많은 코딩시간을 단축시킬 수 있습니다.





 FrameLayoutExampleActivity.java - 액티비티의 작성




여기서는 화면의 뷰를 바꿔주기 위해 두가지 경우에 대해 코드를 작성했습니다.
빨간색 레이아웃 보이기 버튼과, 파란색 레이아웃 보이기 버튼입니다.

버튼 클릭 이벤트에 관련글 보기


switch(v.getId())
{
// 빨간색버튼 클릭
case R.id.frame_layout_example_activity_b_visible_red:
mLlRed.setVisibility(LinearLayout.VISIBLE);
mLlBlue.setVisibility(LinearLayout.INVISIBLE);
break;

// 파란색버튼 클릭
case R.id.frame_layout_example_activity_b_visible_blue:
mLlRed.setVisibility(LinearLayout.INVISIBLE);
mLlBlue.setVisibility(LinearLayout.VISIBLE);
break;
}


visibility 는 레이아웃, 위젯의 보여지는 상태를 설정 할 수 있습니다.
값은 VISIBLE, INVISIBLE, GONE 의 세가지 입니다.

   상태
 View.VISIBLE  화면에 보여진다. 영역을 차지한다.
 View.INVISIBLE  화면에서 안보인다. 영역을 차지한다.
 View.GONE  화면에서 안보인다. 영역을 차지하지 않는다.

이 세가지의 값들은 매우 중요합니다. 상황에 따라서 안보이는 설정을 할때, INVISIBLE을 사용할지, GONE을 사용할지 결정해야 할때가 있습니다.

FrameLayout의 경우 보통은 INVISIBLE 만 사용해도 됩니다.
영역을 차지하던 차지하지 않던, 어차피 여러 레이아웃을 겹칠 수 있으므로 영향을 별로 미치지 않기 때문이죠.

LinearLayout내에 여러 레이아웃, 위젯들이 있는 경우엔 INVISIBLE일지, GONE일지 잘 선택해야 합니다.
각 위젯들의 영역이 화면에 보여지는데 중요한 요소라면 INVISIBLE과 GONE의 차이에 따라 치명적일 수 있습니다.

위의 경우엔 LinearLayout 두 개(빨강/파랑)를 겹쳐놓고, VISIBLE/INVISIBLE 만으로 사용해도 문제가 없습니다.
visibility의 상태가 GONE이던 INVISIBLE이던 다른 레이아웃, 위젯에 영향을 미치지 않기 때문이죠.

FrameLayout은 이외에도 여러가지 형태로 뷰를 출력하는데 사용될 수 있습니다.


- 스크린 샷 -

애플리케이션 실행 시 처음으로 보이는 화면



오른쪽에 있는 파란색 레이아웃 보이키 버튼 클릭



파란색 레이아웃이 보여진다.



빨간색 레이아웃 보이기 버튼 클릭



빨간색 레이아웃이 보여진다.



Posted by croute

댓글을 달아 주세요