관계, Networking 그리고 Programming

setLayoutParams 에러

androbook 본캐 2013. 8. 26. 15:35

응홍홍홍...


SlidingDrawer를 구현해 놓은 화면에서 가로모드 진입 시 이 drawer가 화면을 덮어버리는 문제를 방지하고자 onConfigurationChanged 함수에서 setLayoutParams을 다시 해주는 간단한 코드를 구현했다.


간단해.. 간단한거 아님...? 이라고 생각했는데 테스트하려 화면을 돌려보니 에러 발생. 으엥.


java.lang.ClassCastException android.view.viewgroup.$layoutParam .......블라블라...


라는 에러 메시지를 로그 상에 토해 놓았다. 하하하하하... 아 뭐...  쫌 간단히 좀 가자 좀... 이놈아 나 오늘 기운 없다고!!!


라고 해봐야 이클립스가 알아 줄리 만무...그래.. 수정해야지 뭐. 이슈가 발생한 코드를 뚫어져라 쳐다본다.


이슈 발생 코드 :

SlidingDrawer.LayoutParams changed_layout = new SlidingDrawer.LayoutParams(~~);

~~

m_sd_itemDrawer.setLayoutParams(changed_layout);


흠... 잘못한 거 없어보이는데?...


로그를 자세히 보니 viewgroup의 layoutParam을 RelativeLayout의 layoutParam으로 변환할 수가 없다고 한다. 응? 난 SlidingDrawer layoutParam을 수정한건데? 라고 반문해 보지만, 우겨서 바뀔 건 없다.


이 SlidingDrawer를 포함하고 있는 root layout이 relative layout이다. 그럼 root layout의 layoutParam으로 만들어줘야 하는건가? 라고 생각하며 컴파일러가 원하는대로 수정해 준다. 


수정 코드 :

RelativeLayout.LayoutParams changed_layout = (RelativeLayout.LayoutParams)m_sd_itemDrawer.getLayoutParams();

changed_layout.height = res.getDimensionPixelSize(R.dimen.item_indrawer_portrait_height);

m_sd_itemDrawer.setLayoutParams(changed_layout);


음, 정상동작한다. 그렇긔나.. 수정되었네.

자, 다음 기능구현으로 ㄱㄱ~