Android Widget - 위젯 설정
설정
위젯을 만들기 전에 설정이 필요한 경우가 있습니다. 예를 들어 시계 위젯에서 지역을 설정하거나 날씨 위젯에서 지역을 설정하는 작업을 진행할 경우 입니다. 이러한 설정을 Activity를 통해 위젯 초기에 진행하거나 위젯 생성 후 중간에 진행할 수 있습니다.
Activity 생성 및 연결
ACTION_APPWIDGET_CONFIGURE로 Activity가 실행되기 때문에 intent-filter를 추가합니다. (추가 안해도 정상 작동하지만 공식 문서에서는 선언하는 것을 원칙으로 합니다.)
<activity android:name=".ExampleAppWidgetConfigurationActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
AppWidgetProviderInfo에 Activity를 연결합니다.
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
...
android:configure="com.example.android.ExampleAppWidgetConfigurationActivity"
... >
</appwidget-provider>
위 두 작업을 끝내면 위젯을 추가할 때 Activity가 실행됩니다.
위젯 설정
위젯 설정을 성공적으로 마쳤다는 응답을 AppWidgetManager에게 전달해야 성공적으로 위젯이 생성됩니다.
AppWidgetId 가져오기
Activity에서 Intent를 통해 가져올 수 있습니다. Key값으로 AppWidgetManager.EXTRA_APPWIDGET_ID를 사용하면 됩니다.
val appWidgetId = intent.getIntExtra(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID
)
위젯 업데이트하기
Configure Activity가 종료될 때 onUpdate가 호출되지 않기 때문에, 위젯 업데이트를 수동으로 해야 합니다.
val appWidgetManager = AppWidgetManager.getInstance(context)
val views = RemoteViews(context.packageName, R.layout.example_appwidget)
appWidgetManager.updateAppWidget(appWidgetId, views)
Result 내보내기
setResult를 통해 성공적으로 위젯을 설정했다고 응답합니다.
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
setResult(Activity.RESULT_OK, resultValue)
finish()
설정 옵션
위젯을 여러번 설정하는 경우나 위젯을 앱에서 직접 추가하는 경우가 있을 수도 있습니다. 이러한 설정을 AppWidgetProviderInfo를 통해 진행할 수 있습니다.
- WIDGET_FEATURE_CONFIGURATION_OPTIONAL : 기본 값 입니다. configure이 설정됐으면 위젯을 추가할 때 자동으로 Activity가 실행됩니다.
- WIDGET_FEATURE_HIDE_FROM_PICKER : 위젯 목록에는 보이지 않지만 앱에서 직접 위젯을 추가할 수 있습니다.
- WIDGET_FEATURE_RECONFIGURABLE : 위젯을 여러번 설정할 수 있습니다. 해당 옵션을 설정한 경우 아래와 같이 위젯의 크기를 수정할 때 설정 버튼이 생깁니다.
WIDGET_FEATURE_RECONFIGURABLE
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable">
</appwidget-provider>
Git (예제 코드)
https://github.com/KangTaeJong98/TaeTae98
GitHub - KangTaeJong98/TaeTae98: Study Repository
Study Repository. Contribute to KangTaeJong98/TaeTae98 development by creating an account on GitHub.
github.com