본문 바로가기

Android/Application

안드로이드 Always on Top View 만들기 (항상 위에오는 뷰 만들기)

안드로이드 Always on Top View 만들기 (항상 위에오는 뷰 만들기)


(이런 식)


모든 화면을 무시하고(심지어 잠금화면도)


항상 위에 오는 뷰를 만드는 법을 적는다.


안드로이드 3.0 이상의 환경에서 작동한다

진저브레드에선 작동을 보장하지 않는다.

젤리빈은 작동은 되나

이 소스는 아이스크림 샌드위치 API를 사용했다.

젤리빈 API를 사용하면 소스를 조금 다르게 작성해야 한다.


언제나 최상단에 오는 뷰를 만드는 단계는


1. 서비스 만들기

2. 서비스에 뷰 객체를 만들기

3. 서비스에 레이아웃 파라미터를 만들기

4. 윈도우 매니저에 넣어서 등록하기

5. 사용을 안할 땐 등록한 뷰를 제거하기


가 되겠다.


매니페스트에 android.permission.SYSTEM_ALERT_WINDOW 퍼미션을 추가해야한다.






본문 시작


1. 서비스 만들기


서비스 하나와 액티비티 하나


Service를 상속받은 클래스를 하나 추가한다.


2. 서비스에 뷰 객체를 만들기



서비스의 onCreate() 부분에 작성한다

필자는 이미지 뷰를 사용했다.

//이미지 뷰 객체를 만들고

//그림을 정해주고

//투명도를 설정(0~255사이의 값)

//크기에 따라서 알아서 이미지 크기를 맞추도록


3. 서비스에 레이아웃 파라미터를 만들기



레이아웃 xml파일을 손으로 만든다고 생각하면 된다.


(필자는 어느 환경에서도 비율로 작동하게 스마트폰의 기본 해상도를 감지하게 한 후 mPoint에 저장했다.)

(아래의 풀 소스를 보면 해상도 값을 감지하고 mPoint에 저장한 부분이 서비스의 onCreate()부분에 있다.)



//파라미터 객체를 생성하고

//x크기를 정하고 

//y크기를 정하고 

//TYPE_SYSTEM_OVERLAY로 최상단에 오게 레이아웃을 설정하고

//터치 이벤트가 제대로 작동되게 설정하고

//알파값을 가지는 픽셀 포멧으로 설정한다


//그라비티를 사용해 왼쪽 상단에 위치하게 하고

//수직 여백을 10%만큼 준다

//수평 여백을 10%만큼 준다


4. 윈도우 매니저에 넣어서 등록하기



addView함수에 (뷰 객체, 레이아웃 파라미터) 를 넣어 등록하면 작동이 시작된다.


5. 사용을 안할 땐 등록한 뷰를 제거하기



서비스의 onDestroy()에서 제거하는 것을 잊지 말것.