IT_Programming/Android_Java

TextView에 ScrollView로 감싸지 않고 스크롤되게 하기

JJun ™ 2015. 1. 14. 21:29

 


 출력: http://catnest.tistory.com/m/post/36


 


 

많은 양의 글이 담긴 TextView를 스크롤하는건 흔히 있는 일이다.
이때 가장 잘알려지고 많이 쓰이는 해결책은 Layout xml파일에서 ScrollView로

TextView를 감싸는 것이다. 보편적으로 젤 쉬운 방법인거 같다.


허나 유동적으로 Scroll 를 해야하는경우 그러니까 TextView가 유동적으로 생성되는경우에는

XML 파일에 TextView와 ScrollView를 명시하지 못한다. 이럴땐 어떻게 하면 될까?

또는 ScrollView를쓰지 않고 좀더 깔끔하게 TextView를 스크롤 할순 없을까?

 

위 원본문서에서 소개된 방법은 xml파일에 ScrollView를 쓰지 않고  TextView에 스크롤을 만드는

방법이지만 나는 이것을 코드상에서 유동적으로 만들어지는 TextView에 스크롤 기능을 넣는 것으로

활용했다.

 

TextView 의 메소드인 setMaxLine() 메소드로 적절한 최대 라인수를 정하고 (기본값이 100이라고 한다)

setVerticalScrollBarEnabled(true) or  setHorizontalScrollBarEnabled(true)을 이용해서

어느 방향으로 스크롤을 할건지 설정한다. 그리고 setMovementMethod() 메소드를 호출한다.

setMovementMethod()메소드의 인자로 new ScrollingMovementMethod() 를 넘겨주면된다.


위의 방식으로 xml 에 명시하지 않은 TextView에 스크롤기능을 넣는것에 성공했다.

하지만 스크롤 바는 보이지 않고 그냥 스크롤만 된다.


나는 버튼을 눌러야만 지도위에 TextView가 생기도록 하는 프로그램이 었는데

아래와 같이 써서 제대로 동작했다.

 

 mCourseInfoView.setMaxLines(200);
 mCourseInfoView.setVerticalScrollBarEnabled(true);
 mCourseInfoView.setHorizontalScrollBarEnabled(true);
 mCourseInfoView.setMovementMethod(new ScrollingMovementMethod());
 mCourseInfoView.setMaxHeight(mMap.getHeight()/2);
 mMap.addView(mCourseInfoView
, courseInfoLayout);