ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] FrameLayout 기본부터 다지고 부셔버리기
    Android 2021. 1. 9. 01:00

     

    안드로이드에서 기본적으로 제공하는 레이아웃중에 기본중의 기본 레이아웃 FrameLayout 다들 써본적있지?

     

    안드로이드 개발을 해봤다면 다들 한 번쯤은 사용해 봤을 거라 믿어~

    뭐? 별로 사용하고 있지 않다고? 그렇다면 이글을 한 번 읽어 봐주길 바래.

     

    나도 RelativeLayout 을 주로 사용했어서 다른 레이아웃을 사용하는데 꺼리낌이 있었어.

    하지만 어쩔 수 없이 FrameLayout 을 사용해야 되는 상황이 있더라고,

    그 상황은 딱 한가지로 정리할 수 있겠어.

     

    심플하게 자식으로 한가지의 뷰 만을 가지고 싶을 때!

     

    본론에 들어가기 앞서 FrameLayout 이 뭔지부터 알아야겠지?

     

    Frame 이 뭔지는 다들 알지? 영상에서 쓰이는 프레임? 땡이야

    틀, 액자라는 뜻이 라는데 나도 사전찾아봐서 알았으니 부끄러워 하지 않아도 돼~ 히히

     

    FrameLayout 은 '틀' 이라는 뜻 그대로 화면에 틀을 둔다고 생각하면 이해하기 편할거야

    공식문서에서는 어떻게 쓰여있는지 알아볼까?

     

    Android Developer 프레임레이아웃 설명

     

    영어로 되어있어서 뭔말인지 모르겠지? 나도 모르겠어서 번역을 썻지 모얌~

    보면 알 수 있듯이 FrameLayout should be used to hold a single child view 이 부분이 위에서 말했던 FrameLayout 의 가장 중요한 부분인 것 같아.

     

    그러면 본격적으로 코드를 보면서 얘기를 나누어 볼까?

     

    FrameLayout 에다가 빠알간색 뷰를 추가해 봤어. 보통 FrameLayout 사용할 때는 아래의 빨간색 부분을 WebViewFragment 또는 Tab의페이지 를 넣어주는 용도로 사용되곤 하지~

    이건 아주 중요하니깐 밑줄 치고 마음한켠에 넣어두자고 🤩

     

    그런데 공식문서를 보면 android:layout_gravity 를 사용할 수 있다고 나와 있어.

    이것도 한 번 확인해 봐야겠지?

    이전에 만들어 뒀던 FrameLayout 에다가 4개 뷰를 만들어서 각각 오른쪽 위, 왼쪽 위, 오른쪽 아래, 왼쪽 아래에 위치하게끔 만들었어.

    색깔을 내맘대로 설정해줬는데, 어때~ 이뽀? 😘

     

    gravity 설정을 해보니깐 뭔가 다르게도 설정하고 싶어지는거 있지?

    그래서 4개 뷰를 각각 위쪽 가운데, 왼쪽 가운데, 오른쪽 가운데, 아래쪽 가운데에 위치하게끔도 만들어 봤어. 히히호호

     

    근데 공식문서 바로 밑에 보니깐 추가된 뷰들이 stack 처럼 쌓인다는데 이것도 확인안해보면 섭섭하겠지? 

    음... 생각보다 배색이 이쁘진 않네... 뭐 이건 감안하고 봐주길 바라~👌👌

    위에서부터 차례대로 밑에 쌓여지는걸 확인할 수 있어. 하지만 뷰들이 겹치는건 UX적으로 좋지 않으니 추천하지 않는다는거!!

     

    그러면 이제 슬슬 마지막으로 치닫고 있는데, FrameLayout 의 사이즈 계산에 대해서도 확인 해보려고 해~!

    일단 FrameLayout 의 width, height 를 wrap_content 로 바꿔보고 안에 있는 뷰들을 하나씩 GONE 시켜보면 아래같이 FrameLayout 의 사이즈가 줄어들다가 마지막에는 아예 없어지는 것을 확인할 수 있어.

     

    위에 코드쪽 주석처리가 마음에 안들긴 하는데, xml이니깐 다들 이해해주리라 믿어~

    여기까지 했으면 어느정도 다 해본 것 같아! 그러면 진짜 마지막으로 setConsiderGoneChildrenWhenMeasuring() 을 확인해 봐야겠지?

    View.GONE 을 해주더라도 setConsiderGoneChildrenWhenMeasuring() 을 해주게 되면 그대로 뷰 크기가 유지된다고 해.

    한 번 시험해 보자.

     

    이거하다 보니깐 안드로이드 스튜디오 업데이트 하라고 뜨던데 이건 나중에 따로 포스팅하도록 할게. 몇가지 재밌는 부분이 있으니깐 기대해도 좋을거야.

     

    일단, FrameLayout 크기를 확인하기위해 background 를 검은색으로 넣어봤어. 그리고 set어쩌고Measuring() 을 눌러보니깐 xml에서는

    android:measureAllChildren="{boolean}"  으로 확인할 수 있대. 그럼 참을 수 없지!

    바로 넣어보니깐

     

    이렇게 자식들이 GONE 되었어도 잘 보이는거 있지? 너무 다행이야. 처음해보는 거라 안되면 어쩌나 했거든 >_<

    근데 이게 왜 있나 몰라.

    보통 부모에 자식의 크기를 유지시키고 싶을 때는 invisible 로 설정해줬어서 있는지도 몰랐거든...

    그런데 생각해보면 한 번에 invisible 때린것과 같은 효과를 줄 수 있는 것 같아서 효용 가치는 있는 attribute 인 것 같아!

     

    참고로 attribute 는  android:~~~="~~~" 인거 다들 알고있지?

     

    이쯤에서 FrameLayout 에 대한 포스팅은 마칠려고해.

    다들 긴 글 읽어주느라 고생했고 고마워.

    그럼 안녕~

     

     

Designed by Tistory.