Android 개발 Tip - 11. 동적으로 Layout을 생성했을때 잊지 말아야 할 것..


외부클래스로 View를 상속한 클래스를 만들고 ,
이 클래스에서 특정 함수가 호출되면 invalidate 하여 onDraw가 호출되도록 구성하는 간단한 문제에서,
아무리 invalidate를 해도 onDraw가 호출되지 않는 상황에 직면했다.

이 상황에서 생각해 봐야 할 몇가지.

 이 View가 현재 Invisible한 상태는 아닌가 ?

1. Layout parameter 등을 고려해보자.
2. 해당 클래스가 다른뷰에 가려져 있지 않은가.


필자의 같은 경우에는 2번에 해당했다.
물론 이 문제에 직면했을때 이 생각을 안한 것이 아닌데 , 이 이유는 아닐것이라고 단언해 많은 삽질을 했다.

이 이유가 아닐것이라고 단언한데는 그만한 이유가 있었는데 ,

해당 Layout에는 두개의 뷰가 있었다.
하나가 텍스트뷰고, 하나가 바로 onDraw가 호출되지 않는 문제의 View 상속 클래스.
텍스트뷰의 크기를 new LinearLayout.LayoutParams(LinearLayout.LayoutParames.Fill_Parent, ...Wrap_content)
와 같이 주었기때문에 텍스트뷰가 절대 View를 덮지 않을 것이라는 확신이 있었기 때문이다.

지인까지 동원해서 몇분을 고민한 끝에 , 원인을 알아낼 수 있었다.

LinearLayout.setOrientation 을 .. 호출하지 않았던 것 ㅡㅡ ...

당연히 디폴트 값으로 Vertical이라고 생각했는데 ,
Orientation은 horizontal이 Default 이다..

때문에 텍스트뷰가 layout_width를 모두 점유해 버렸기 때문에 오른쪽에 나오고싶었던 view는 공간을 점유하지 못했다..
저작자 표시 비영리 변경 금지
신고

Android 개발 Tip - 9. inflater로 xml레이아웃을 불러들였을때 findView


자주 까먹는다 .

전개자로 레이아웃을 불러들였을때는 꼭 해당 레이아웃.findViewById(R.id...)를 사용하도록 하자.

그렇지 않으면 뭔지 못 알아 먹는다 요것이 ㅋ

즉 다음과 같은 형태..


linear = (LinearLayout)View.inflate(mainInterface.this, R.layout.sendmessage, null);
EditText body = (EditText)linear.findViewById(R.id.edit_message);

저작자 표시 비영리 변경 금지
신고


티스토리 툴바