Android Lint 이슈 중 UselessParent 이슈를 해결하기 위해서 보던 중 알게된 사실..


불필요하다고 생각되는 중복 LinearLayout을 하나로 합치고 나서,

Layout xml 파일의 Root LinearLayout 에 마진을 주고 background 를 설정했는데,

실제 확인을 해 보면 마진이 안 들어가 있는 문제가 있었음.

이리저리 고민해보다가 구글링 하여 알아낸 사실.


http://stackoverflow.com/questions/16278159/why-linearlayouts-margin-is-being-ignored-if-used-as-listview-row-view


위 링크에 해답이 있었음. 마진이라는 게 Parent View에서 Child의 LayoutParams를 가져와서,

여기에서 마진 만큼의 영역을 제외하고 Child를 그리도록 하는데,

Child View가 어떤 타입인지 알 수 없으므로, Parent에서는 자기가 사용하는 LayoutParams타입으로

Cast해서 사용한다.


ListView는 AbsListView.LayoutParams을 사용하는데 이게 마진을 지원하지 않음.

그래서 ListView의 아이템으로 사용하는 view의 각각에 마진을 설정하려면 중복으로 Layout을 가져가야 하여

어쩔수 없이 SupressLint 사용하였음..


RecyclerView의 경우 ViewGroup.MarginLayoutParams를 상속받아 사용하는데,
이것은 이름에서 알 수 있듯이 margin을 지원하기 때문에 ListView와 같은 layout을
사용하더라도 문제가 되지 않는다. RecyclerView가 성능이 더 좋다고 하니,
ListView을 쓴다면 갈아타는 것을 고려해보자.
RecyclerView는 Android Support Library이므로 참고할 것.


반응형

설정

트랙백

댓글