'핸들러'에 해당되는 글 3

  1. 2014.04.24 TextView에 marquee 적용하기
  2. 2014.04.15 핸들러에 객체메시지 전달하는 방법
  3. 2013.12.31 핸들러(Handler) 사용하기
Android/View | Posted by 덩치 2014. 4. 24. 16:18

TextView에 marquee 적용하기

펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO


Marquee란, 전광판같은곳에서 문장을 좁은 공간에 표시하기위해


옆으로 이동하면서 숨겨진부분의 글자들이 표시되도록 하는것이다.


앞의 글자가 왼쪽으로 사라지고 뒤에 글자가 나타나는형식


Xml 레이아웃에서 텍스트뷰 속성에


        android:ellipsize="marquee"

        android:focusable="true"

        android:marqueeRepeatLimit="marquee_forever"

        android:singleLine="true"


를 추가 해 주면 된다.


첫번째는 marquee를 사용하겠다는 뜻이고,

두번째는 focusTextView가 가지고 있어야 하기때문에 설정한다.

세번째는 반복횟수인데, int값을 줘도 되고 저렇게 계~속 움직이도록 할 수 있다.

네번째는 텍스트뷰의 라인을 한줄로 표시하는것으로, 텍스트가 영역을 벗어날정도로 긴 경우에도

줄내림을 하지 않는다는것이다. 그래야 marquee가 적용된다.



아주 중요한것. 오늘 이것때문에 하루종일 씨름했는데,

setText 할 때 마다 marquee초기화되어 처음부터 표시되기에 setText가 자주 발생하는 뷰에 적용하기에는


성격이 맞지 않다.



펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO





Handlermsgint값을 보낼 수 있다는것은 알것이다.

(http://biig.tistory.com/34  -  핸들러 사용법 포스팅)



그렇다면, 메시지로 객체를 전달할 수는 없을까 ??


할 수 있다.


기존에는


handler.sendEmptyMessage(int);


형식으로 메시지를 전송했다면,



같은 위치에서


Message msg = handler.obtainMessage();


으로 선언 해 주면


msg.what(int);

msg.obj(Object);

msg.arg1(int);

msg.arg2(int);


이런식으로 메시지에 객체를 담을 수 도 있고, 인트값도 저렇게 넣어 줄 수 있다.


잘 활용한다면 매우 유용하다.


예를들어 다른 액티비티에 객체를 전달해야 하는 경우, parcelable를 상속받고 기타 과정이 복잡한데


Handler를 통해 Object를 넘겨주면 매우 간단하게 해결이 가능하다.


그리고 sendEmptyMessage 대신


handler.sendMessage(msg);


로 해주면 전달이 완료된다.




Android/기본스킬 | Posted by 덩치 2013. 12. 31. 11:19

핸들러(Handler) 사용하기

펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO


기본적이지만 아주 중요한 Handler

주로 Thread와 함께 사용된다.

안드로이드는 Thread 내에서 UI작업이 불가능하다.

 만약 Thread 내에서 UI작업을 하게되면

CalledFromWrongThreadException 예외가 발생하게된다.

이를 해결하기 위해 핸들러를 이용해 다른 스레드에서 UI에 직접 접근하지 않고

핸들러를 거쳐 접근하여 UI작업을 처리해야한다.


두가지 사용법을 알아보자

1. post로 호출하여 사용하기

Handler handle = new Handler();
public Runnable callback = new Runnable() {
public void run() {
// 실행
}
};

호출하는법은
스래드 내에서 callback 안의 내용을 실행하고싶을 때 
handle.post(callback);
딜레이를 주고싶을 때는 handle.postDelayed(callback, 1000); (1초 뒤 실행)


2. message를 보내 호출하기

Handler handle = new Handler() {

public void handleMessage(Message msg) {

if (msg.waht==0x0001) {


}

else if (msg.what==1) {


}

}

};


호출은 handle.sendEmptyMessage(0x0001);  등으로 한다.