스터디/Android+Java

Android XML Percent Size - Weight (2012.05.01)

Dalmangyi 2017. 10. 7.

안드로이드를 공부하면서 진짜 답답했던 부분은 

Xml에서 Layout이나 Content들의 사이즈를 절대값 말고 퍼센트로 못 정했다는 점이다.


XML인데 왜 퍼센트로 못 조정하는 것일까 고민하면서

결국 사용했던 방법은 layout_weight를 사용하는 것 이였다.


전체 화면 사이즈가 픽셀로 1024이라고 가정하고, 넣고 싶은 노드(Node, Content)의 사이즈 픽셀이 

100이라고 했을때, 기존엔 빈공간을 layout_weight=924을 안쓰는 linearLayout을 만들고 

직접 넣고싶은 linearLayout을 100을 만들고 그 안에 넣은다음 사이즈를 fill_parent로 해서 구현했었는데.....

이건 순전 노가다였다.


 <LinearLayout 

android:layout_height="0dp"

android:layout_width="fill_parent"

android:layout_weight="924">

</LinearLayout>

<LinearLayout 

android:layout_height="0dp"

android:layout_width="fill_parent"

android:layout_weight="100">

<TextView 

android:layout_width="fill_parent"

android:layout_height="fill_parent"/>

</LinearLayout>

위와 같은 형태로 작업을 했었다.


그러던 도중 문뜩 weightSum이라는 속성값을 보게 되었고.

그걸로 당장 실험을 하게 되었다.


 <LinearLayout 

android:layout_height="fill_parent"

android:layout_width="fill_parent"

android:orientation="vertical"

android:weightSum="1.0"

android:gravity="bottom">

<LinearLayout 

android:layout_height="wrap_content"

android:layout_width="fill_parent"

android:layout_weight=".30"

android:gravity="center">

<ImageView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="@drawable/line"/>

</LinearLayout>  

</LinearLayout>  

위와같이 전체를 둘러싸는곳에 weightSum 속성을 주고 그 내부 LinearLayout에는 layout_weight을 소숫점으로 주었는데

아주 잘되더군요.



이때까지 고생만 해대고......

진짜 이런 좋은 방법 미리 알았더라면 좋았을텐데 ㅠㅠㅠ



추가로.. layout_weight를 먹이고 싶은 곳의 사이즈는 wrap_content로 놔두는 것이 좋다.


가장 중요한 정보는 weightSum 속성을 사용한 루트 노드의 orientation에 대한 값에 따라 하위 노드의 layout_weight에 대한 상대값 축이 변형된다는 것이다



추가글


이상증상 발견

1예를 들어 루트노드의 속성이 orientation="bottom", weightSum="1.0"일때

   하위 노드의 속성이 layout_weight=".60"이면 60퍼 센트를 차지할꺼 같지만

   실제로는 루트노드의 40퍼센트를 차지하는 것을 발견했다.

   (하지만 이같은 경우는 xml 파싱에 대한 에러인것 같기도 하고 아닌것 같기도 하다.. 간혹가다가 의도한 정상적인 

    화면이 출력되는 경우도 있고. 아닌 경우도 존재한다)

댓글