안드로이드를 개발하면서 scrollview는 유용하게 사용된다.


scrollview는 일반적으로 카톡의 채팅 대화방 같은 기능에 많이 사용되는데,


카톡 채팅 중, 화면을 맨 위로 올리면 (사전에 대화한 메시지가 있을 경우)


전에 주고 받았던 메시지들을 불러 온다.



위와 같은 기능을 사용하기 위해서는 scrollview의 화면을 인식해야 하는데,


안드로이드에서 scrollview에 gesture는 지원하지 않는다고 한다.


(ListView는 setOnGestureListener 가 지원되지만, scrollview는 지원하지 않는다!)



따라서 임의로 제스처를 입혀주고, 제스처를 계산하여 사용해야 한다.




방법은 다음과 같다.


1. 기본 Activity 화면의 onCreate 메소드에 scrollview 객체를 정의한다. (findViewBy..를 이용하여 연결)


2. 마찬가지로 onCreate 메소드 내에 다음과 같이 정의한다.





3. 이번엔 기본 Activity 화면(현 클래스)에 innerClass를 다음과 같이 정의한다.

(액티비티 클래스 내에 클래스를 정의해 준다.)




위 코드(이미지)의 myToast() 메소드와 ScrollMoveRight...() 등은 본인이 임의로 정의한 메소드이다.


onFling() 메소드 내에 if 문 대신, 본인이 원하는 방법으로 내용을 꾸며주면 된다.


이상~









이클립스에서 작업을 하던 중, 


잘 돌아가던 소스가 위와 같은 오류 메시지를 나타내며 종료 되었다!!





검색을 해보니,,, >>> unable to start activity componentinfo..


구글과 네이버를 오가며 검색한 결과, 여러 의견들이 나왔고..



종합해보면,, AndroidManifest.xml 의 문제였다. (..라고 하였다.)


만약 AndroidManifest.xml 내에 <Activity>, <Application> 또는 


오타 등의 잘못된 경로라면 문제가 되지 않는다. (고치면 되니까!)


그러나 멀쩡한 소스에 위와 같은 현상이 나타난다면, (전 환경에서는 잘 돌아갔다면!)


이클립스와 SDK API, 또는 라이브러리의 문제이다.


본인은 이와 같은 현상을 2번 겪었는데, 


한 번은 검색 결과의 조언대로 AndroidManifest.xml 파일에 주석 또는 스페이스, 엔터 등을


요란하게 넣다 뺐다 하다가 해결이 되었다. (실행 됨)


그러나 2번째는 아무리 xml 파일을 수정해도 되지 않았는데,


결국 안드로이드 스튜디오(IDE)를 깔고 다시 돌아가는 것을 확인하였다.



결론:


정확한 원인이 파악된 것은 아니다. 그러나 추측해보면,


이클립스가 API나 라이브러리를 제대로 찾지 못해서 발생하는 버그(?)인 것 같다.


만약 해결이 되지 않는다면 다음과 같은 부분을 점검해 보기 바란다.


- 이클립스를 C 드라이브의 단순 경로에 설치할 것 예) C:\eclipse 등


- 안드로이드 SDK API가 버전 별로 잘 설치되어 있는지 확인


- 라이브러리가 잘 추가 되었는지 확인


- AndroidManifest.xml 파일에 오타나 오류는 없는지 확인


--------------------------------------------------------------------

*추가 업데이트 2013. 06.28 *


알 수 없던 위의 현상의 원인을 찾았는데, 원인은 숨겨진 버그(?) 였다.


예를 들면 


LinearLayout을 사용할 때, LinearLayout 속성에 orientation을 추가하지 않았을 경우, 


(기본으로 추가해줘야 함) ex) android:orientation = "horizontal"


또는!


정의하지 않은 Activity를 AndroidManifest.xml에 선언하였을 때!


발생하였다.


위의 사항들을 추가로 점검해보자!



끝.








R.java 의 사라짐(?) 버그 때문에 빡쳐서 글을 남긴다.


이클립스에서 안드로이드를 개발하다보면,


여러 실수에 의해서 R.java 파일이 사라진다.


이 때 R.java 파일을 복구해야 하는데,


복구가 되지 않으면 프로젝트를 새로 다시 시작해야하는 불상사가 생긴다.



전에 복구에 실패해서 다시 만든 기억이 있다;; (아 빡침ㅋㅋ)


하지만 아주 간단한 요령으로 해결할 수 있다.


방법은?!


onCreate(...) 메소드 안에 있는


setContentView(R.layout.activity_main); 코드에서


;를 지우고 실행 후, 다시 붙이는 것!


간단하다..


지식인에서 검색하면 안 된다는 질문과 클린 프로젝트하라는 대답이 많은데,


이렇게 해결하면 된다.


끗.




문제 해결은 아래의 블로그를 통해서 해결하였다.

(감사합니다.)

출처: http://lkhyeon.tistory.com/66




카카오톡을 예로 들자면,


문자를 입력하기 위해 키패드를 눌렀을 경우, 대화창이 자동으로 올라간다.


경우에 따라서 UI를 가릴 필요도 있고, 가리지 말아야 할 때도 있는데


다음과 같이 사용하면 된다.


키패드가 UI를 밀고 올라갈 때:

getWindow().setSoftInputMode(WindowManager.LayoutParams.Soft_INPUT_ADJUST_PAN);


키패드가 UI를 무시하고 위를 덮을 때:

getWindow().setSoftInputMode(WindowManager.LayoutParams.Soft_INPUT_ADJUST_RESIZE);



위의 코드는 동적으로 옵션을 설정해주고자 할 때 사용하면 된다.


일반적으로 정적인 방법으로는 AndroidManifest.xml 파일에서 


<Activity 안에


android:windowSoftInputMode="stateHidden|adjustResize" (또는 adjustPan)


를 입력하면 된다.


그러나 카카오톡과 같은 채팅 프로그램이나 기타 동적으로 옵션을 설정하고자 할 때는


위와 같은 방법을 사용하면 될 것이다.



참조 사이트: 


http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html


http://cafe.naver.com/otodev/23




+ Recent posts