앱 위젯은 홈 화면과 같은 다른 앱에 삽입하고 주기적인 업데이트를 받을 수 있는 소형 앱 뷰입니다. 이러한 뷰는 사용자 인터페이스에서 위젯이라고 하며 앱 위젯 제공자 (또는 위젯 제공자)를 사용하여 게시할 수 있습니다. 다른 위젯을 보유하는 앱 구성요소를 앱 위젯 호스트 (또는 위젯 호스트)라고 합니다. 그림 1은 샘플 음악 위젯을 보여줍니다.

이 문서에서는 위젯 제공자를 사용하여 위젯을 게시하는 방법을 설명합니다. 앱 위젯을 호스팅하기 위해 자체 AppWidgetHost를 만드는 방법에 관한 자세한 내용은 위젯 호스트 빌드를 참고하세요.
위젯을 디자인하는 방법에 관한 자세한 내용은 앱 위젯 개요를 참고하세요.
위젯 구성요소
위젯을 만들려면 다음과 같은 기본 구성요소가 필요합니다.
AppWidgetProviderInfo객체- 위젯의 레이아웃, 업데이트 빈도,
AppWidgetProvider클래스와 같은 위젯의 메타데이터를 설명합니다.AppWidgetProviderInfo은 이 문서에 설명된 대로 XML로 정의됩니다. AppWidgetProvider클래스- 위젯과 프로그래매틱 방식으로 상호작용할 수 있는 기본 메서드를 정의합니다. 이를 통해 위젯이 업데이트, 사용 설정, 사용 중지 또는 삭제될 때 브로드캐스트를 수신합니다. 이 문서에 설명된 대로 매니페스트에서
AppWidgetProvider를 선언한 다음 구현합니다. - 레이아웃 보기
- 위젯의 초기 레이아웃을 정의합니다. 레이아웃은 이 문서에 설명된 대로 XML로 정의됩니다.
그림 2는 이러한 구성요소가 전체 앱 위젯 처리 흐름에 어떻게 적용되는지 보여줍니다.
위젯에 사용자 구성이 필요한 경우 앱 위젯 구성 활동을 구현합니다. 이 활동을 통해 사용자는 위젯 설정(예: 시계 위젯의 시간대)을 수정할 수 있습니다.
- Android 12 (API 수준 31)부터는 기본 구성을 제공하고 사용자가 나중에 위젯을 재구성하도록 할 수 있습니다. 자세한 내용은 위젯의 기본 구성 사용 및 사용자가 배치된 위젯을 재구성하도록 사용 설정을 참고하세요.
- Android 11 (API 수준 30) 이하에서는 사용자가 홈 화면에 위젯을 추가할 때마다 이 활동이 실행됩니다.
또한 유연한 위젯 레이아웃, 기타 개선사항, 고급 위젯, 컬렉션 위젯, 위젯 호스트 빌드를 개선하는 것이 좋습니다.
AppWidgetProviderInfo XML 선언
메타데이터 설정 (예: 기본 셀 크기, 크기 조절 제약 조건, 업데이트 빈도)을 정의하는 것은 기존 뷰와 Glance 기반 위젯 모두에서 완전히 동일합니다.
메타데이터 XML 파일을 정의하고 구성하는 방법을 알아보려면 Glance 문서의 Compose 우선 AppWidgetProviderInfo XML 선언 섹션을 참고하세요.
AppWidgetProvider 클래스를 사용하여 위젯 브로드캐스트 처리
플랫폼의 브로드캐스트 수신기 메커니즘, 매니페스트 선언 필터, 수명 주기 이벤트 루프는 플랫폼 아래에 통합됩니다. Compose 우선 개발에서 이러한 브로드캐스트는 GlanceAppWidgetReceiver 래퍼를 사용하여 조정됩니다.
매니페스트에 수신자를 등록하고 Hilt 호환 수명 주기 재정의를 구현하는 방법을 알아보려면 Glance 문서의 Compose 우선 AppWidgetProvider 클래스를 사용하여 브로드캐스트 처리 섹션을 참고하세요.
위젯 레이아웃 만들기
XML로 위젯의 초기 레이아웃을 정의하고 프로젝트의 res/layout/ 디렉터리에 저장해야 합니다. 자세한 내용은 디자인 가이드라인을 참고하세요.
레이아웃에 익숙하다면 위젯 레이아웃을 만드는 것은 간단합니다. 하지만 위젯 레이아웃은 RemoteViews를 기반으로 하므로 모든 종류의 레이아웃이나 뷰 위젯을 지원하지는 않습니다.
RemoteViews에서 지원하는 뷰의 맞춤 뷰 또는 서브클래스는 사용할 수 없습니다.
RemoteViews은 ViewStub도 지원합니다. 이는 런타임에 레이아웃 리소스를 지연 확장하는 데 사용할 수 있는, 크기가 0인 보이지 않는 View입니다.
스테이트풀(Stateful) 동작 지원
Android 12에서는 다음과 같은 기존 구성요소를 사용하여 스테이트풀(Stateful) 동작을 지원합니다.
위젯은 여전히 스테이트리스(Stateless)입니다. 앱은 상태를 저장하고 상태 변경 이벤트에 등록해야 합니다.

다음 코드 예는 이러한 구성요소를 구현하는 방법을 보여줍니다.
// Check the view. remoteView.setCompoundButtonChecked(R.id.my_checkbox, true) // Check a radio group. remoteView.setRadioGroupChecked(R.id.my_radio_group, R.id.radio_button_2) // Listen for check changes. The intent has an extra with the key // EXTRA_CHECKED that specifies the current checked state of the view. remoteView.setOnCheckedChangeResponse( R.id.my_checkbox, RemoteViews.RemoteResponse.fromPendingIntent(onCheckedChangePendingIntent) )
두 가지 레이아웃을 제공합니다. 하나는 res/layout-v31에서 Android 12 이상을 실행하는 기기를 타겟팅하고 다른 하나는 기본 res/layout 폴더에서 이전 Android 11 이하를 타겟팅합니다.
둥근 모서리 구현
외부 배경과 내부 비례 반경을 계산하는 것은 표준이며 공유됩니다. Compose 우선 개발에서는 맞춤 테마 리소스와 함께 Kotlin에서 동적으로 설정할 수 있습니다.
이전 Android 기기에서 모서리 반경을 구현하거나 동적 스타일을 설정하려면 Glance 문서의 Compose 우선 둥근 모서리 구현 섹션을 참고하세요.