
미니 안드로이드 위젯 개발에 대해
- 불심
- 조회 수 1162
- 2023.10.03. 21:03
추석연휴가 어느덧 끝나가고 있군요.
저는 아직 6일 더 쉬는 여유가 있어, 간만에 개발관련 얘기나 한번 해보려 합니다.
현역 안드 개발자고, 위젯도 개발해봤기 땜에 하고싶은 말들이 좀 있네요.
1. 위젯 개발은 일반 UI보다 어렵고 척박하다.
위젯은 특정앱에 종속되는 기능이지만, UI를 그리는 책임은 시스템과 그에 기본 지정된 런처에 달려있습니다.
런처와 앱간에 직접 소통될수 있는 통로같은건, 비표준의 인터페이스를 뚫지 않는이상 없습니다.
(예전에 삼성 모 폰에서 터치이벤트를 위젯에 억지로 넣으려고 런처에 커스텀 함수 정의된건 봤었습니다만..)
그렇기 때문에 일반적인 앱 UI와 달리, 알림 UI와 동일한 RemoteViews라는 방식을 씁니다.
쉽게 말하면 원격지(런처)에 뷰를 놓고 조작을 하는 것입니다.
문제는 이 구조가 UI 구현에서 굉장히 난해한 상황을 만듭니다.
커스텀뷰뿐 아니라, 안드로이드에서 유용한 뷰 UI 오픈소스 사용이 불가합니다.
그냥 오래전에 나온 LinearLayout, FrameLayout, RelativeLayout같은 원시적인 뷰들을
노가다를 해서 만든다고 보심 됩니다.
2. 런처 격자 크기에 대한 명확한 정의가 없다.
위젯 개발할 때 제일 골때리는 부분중 하나입니다. 단말기마다 런처마다 그리드 사이즈는 달라지는데
이게 그리드 단위로 처리되지 않고, 그냥 위젯의 가로세로 크기를 일정 이하로 낮추면 위젯이 차지하는 격자크기가 이정도가 될것이다라고 매뉴얼에 나와있습니다.
https://developer.android.com/develop/ui/views/appwidgets/layouts
3. 입력 이벤트 처리가 한정된다.
이 또한 위젯의 제약사항중 하나입니다. 위젯에선 클릭을 했을때 앱 구동을 원하는 방식으로 실행하는
PendingIntent 지원정도가 한계입니다.
예전에 삼성 모 폰 얘기를 했었는데, 역분석 했을 때 날씨 위젯이 원UI 런처하고 타이트하게 커플링되어 있었습니다. 관심지역이 여러개 등록된 상태일 때 위아래로 스크롤하면 런처가 위젯에 해당 이벤트를 전달해서 지역을 변경해주는 기능이 있었죠. 이건 비표준 기능입니다. 다른 런처를 쓰고있다면 이 기능은 동작하지 않습니다.
4. 표준 문서의 룰을 지키지 않는 일부 런처들이 있다.
표준에서 정의된 그리드 사이즈 정보를 얻고싶은데, 일부 단말의 런처에선 그것이 빠져있어서 난감한 경우가 있습니다.
위젯의 UI 비율이 예쁘게 보이려면 그리드 크기를 알아내어 스케일링을 해줄 필요가 있는데, 그걸 할 수 없는 경우가 있습니다.
5. R값
런처가 직접 라운딩을 깎기도 하지만, 위젯 자체가 개발당시 이미 깎여서 디자인되는 경우도 많습니다. 전국시대같은 어지러움이 느껴지는군요.
6. 비록 안드로이드 12에서는 어느정도 노력했건만...
위젯은 안드로이드 초창기에 등장한 기능이지만 거의 발전이 없다가, 안드로이드 12에서 변화가 꽤 있었습니다.
- 기존 위젯 설정 변경(reconfigurable)
- 시스템에서 제안하는 라운딩 깎는 dp값
- 동적인 프리뷰 레이아웃 처리 제공
- 라디오, 체크박스 등의 컴파운드 버튼 지원
- 새로운 UI 수정기능 추가 (@RemotableViewMethod 붙은 메서드들이 늘어남)
안드로이드 12가 나온지는 꽤 됐습니다만은, 위젯은 사실 앱 개발에서도 후순위에 속해서 저변이 깔리는데는 시간이 필요 할 것 같습니다.

한 때는 블빠이자 하드웨어를 좋아했었던 늙은이...
[폰]
S23 Ultra
[태블릿 PC]
아이패드 프로 12.9 3rd gen. (회사장비)
[랩탑]
맥북 프로 16인치 M1 pro 32GB (회사장비)
맥북 프로 14인치 M1 16GB (회사장비)
[데스크탑]
인텔 코어 i7 12700k
지스킬 DDR4 3200@3900 (CL16)
RTX 4090
애플 처럼 딱 일관된 가이드라인이 잘 없고, 이마져도 런처 마다 다 다르다 보니 개발하기 쉽지 않긴 하죠