이 페이지에는 사용 가능한 선택적 위젯 개선사항에 대한 세부정보가 포함되어 있습니다. (Android 12(API 수준 31)부터) 이러한 기능은 선택사항이지만 사용자 환경을 구현하고 개선하는 데 살펴보겠습니다.
동적 색상 사용
Android 12부터 위젯은 기기 테마 색상을 사용할 수 있습니다. 인코더-디코더 아키텍처를 생성합니다. 이렇게 하면 여러 위젯 간의 전환 및 일관성을 개선할 수 있습니다.
동적 색상을 구현하는 방법에는 두 가지가 있습니다.
시스템의 기본 테마 사용 (
@android:style/Theme.DeviceDefault.DayNight
)로 설정합니다.다음에서 Material 3 테마 (
Theme.Material3.DynamicColors.DayNight
)를 사용하세요. Android 라이브러리로, Android용 Material 구성요소에서부터 사용할 수 있습니다. v1.6.0을 참고하세요.
루트 레이아웃에서 테마가 설정되면 테마에서 일반적인 색상 속성을 사용할 수 있습니다. 루트 또는 그 하위 요소에서 동적 색상을 선택할 수 있습니다.
사용할 수 있는 색상 속성의 몇 가지 예는 다음과 같습니다.
?attr/primary
?attr/primaryContainer
?attr/onPrimary
?attr/onPrimaryContainer
Material 3 테마를 사용하는 다음 예에서 기기의 테마 색상은 다음과 같습니다. '보라색'입니다. 강조 색상과 위젯 배경은 밝은 테마와 어두운 테마에 맞게 조정됩니다. 인코더-디코더 모드가 작동합니다.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorPrimaryContainer"
android:theme="@style/Theme.Material3.DynamicColors.DayNight">
<ImageView
...
app:tint="?attr/colorPrimaryContainer"
android:src="@drawable/ic_partly_cloudy" />
<!-- Other widget content. -->
</LinearLayout>
![밝은 모드 테마 위젯](https://developer.android.com/static/images/appwidgets/example-lightmode.png?authuser=0000&hl=ko)
![어두운 모드 테마 위젯](https://developer.android.com/static/images/appwidgets/example-darkmode.png?authuser=0000&hl=ko)
동적 색상의 이전 버전과의 호환성
동적 색상은 Android 12를 실행하는 기기에서만 사용할 수 있습니다.
또는 그 이상일 수 있습니다. 하위 버전에 맞춤 테마를 제공하려면 기본 테마를 만드세요.
맞춤 색상 및 기본값을 사용하는 새 한정자 (values-v31
)로 변경
테마 속성으로 사용할 수 있습니다.
다음은 Material 3 테마를 사용하는 예입니다.
/values/styles.xml
<resources>
<style name="MyWidgetTheme" parent="Theme.Material3.DynamicColors.DayNight">
<!-- Override default colorBackground attribute with custom color. -->
<item name="android:colorBackground">@color/my_background_color</item>
<!-- Add other colors/attributes. -->
</style>
</resources>
/values-v31/styles.xml
<resources>
<!-- Do not override any color attribute. -->
<style name="MyWidgetTheme" parent="Theme.Material3.DynamicColors.DayNight" />
</resources>
/layout/my_widget_layout.xml
<resources>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
...
android:background="?android:attr/colorBackground"
android:theme="@style/MyWidgetTheme" />
</resources>
음성 지원 사용 설정
앱 작업을 사용하면 Google 어시스턴트가 관련 사용자 음성 명령에 대한 응답으로 위젯을 표시합니다. GCP 콘솔에서 위젯을 사용하여 내장 인텐트 (BII), 앱이 사전에 Android 및 Android와 같은 어시스턴트 노출 영역에 위젯을 표시할 수 있습니다. Android Auto 사용자는 콘텐츠에서 고정할 수 있습니다. 위젯을 향후 참여도를 높일 수 있습니다.
예를 들어 운동 앱의 운동 요약 위젯을 구성할 수 있습니다.
사용자의 음성 명령을 처리하여
GET_EXERCISE_OBSERVATION
드림
BII. 사용자가 이 BII를 트리거할 때 어시스턴트가 사전에 위젯을 표시합니다.
"Hey Google, 이번 주에 몇 km나 뛰었어?
ExampleApp?"
여러 카테고리의 사용자 상호작용을 다루는 수십 가지 BII가 있습니다. 거의 모든 Android 앱이 음성 위젯을 향상할 수 있습니다. 시작하려면 앱 작업과 Android 위젯 통합을 참고하세요.
앱의 위젯 선택 도구 환경 개선
Android 12에서는 앱의 위젯 선택 도구 환경을 동적 위젯 미리보기와 위젯 설명을 추가하여 앱에 적용할 수 있습니다.
위젯 선택 도구에 확장 가능한 위젯 미리보기 추가
Android 12부터, 위젯 선택 도구를 확장할 수 있습니다 이를 위젯의 기본 크기로 설정됩니다. 이전에는 위젯 미리보기가 경우에 따라 홈 화면에 추가됩니다.
확장 가능한 위젯 미리보기를 구현하려면 다음을 사용하세요.
previewLayout
드림
속성을 사용하여 XML 레이아웃을 대신 제공하세요.appwidget-provider
<appwidget-provider
android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>
실제 위젯과 동일한 레이아웃을 사용하고 현실적인 기본값을 사용하는 것이 좋습니다.
또는 테스트 값일 수 있습니다. 대부분의 앱은 동일한 previewLayout
및 initialLayout
를 사용합니다. 대상
정확한 미리보기 레이아웃을 만드는 방법에 관한 안내는 이 문서의 다음 섹션을 참고하세요.
있습니다.
previewLayout
속성과 previewImage
속성을 모두 지정하는 것이 좋습니다.
사용자의 기기가 다시 작동하는 경우 앱이 previewImage
를 사용하도록 되돌아갈 수 있습니다.
previewLayout
을(를) 지원하지 않습니다. previewLayout
속성이 우선 적용됨
previewImage
속성에 매핑해야 합니다.
정확한 미리보기 빌드를 위한 권장 방법
확장 가능한 위젯 미리보기를 구현하려면 다음 항목의 previewLayout
속성을 사용합니다.
appwidget-provider
요소를 사용하여 XML 레이아웃을 제공합니다.
<appwidget-provider
...
android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>
![위젯 미리보기를 보여주는 이미지](https://developer.android.com/static/images/appwidgets/todo-list-groceries.png?authuser=0000&hl=ko)
정확한 미리보기를 표시하려면 실제 위젯을 직접 제공하면 됩니다. 레이아웃을 기본 값으로 사용하려면 다음 단계를 따르세요.
TextView
에android:text="@string/my_widget_item_fake_1"
설정 요소기본 또는 자리표시자 이미지나 아이콘 설정(예:
ImageView
구성요소에 관한android:src="@drawable/my_widget_icon"
기본값이 없으면 미리보기에 잘못되거나 빈 값이 표시될 수 있습니다. 이 접근 방식의 중요한 이점은 현지화된 미리보기를 제공할 수 있다는 것입니다. 있습니다.
ListView
가 포함된 더 복잡한 미리보기에 권장되는 접근 방식의 경우
GridView
또는 StackView
의 경우 동적을 포함하는 정확한 미리보기 빌드
항목을 참조하세요.
확장 가능한 위젯 미리보기와의 하위 호환성
Android 11 (API 수준 30) 이하에서 위젯 선택 도구에
위젯에서 previewImage
를
속성의 값을 제공합니다.
위젯의 모양을 변경하는 경우 미리보기 이미지를 업데이트하세요.
위젯 설명 추가
Android 12부터 위젯에 대한 설명 제공 위젯에 표시할 선택 도구입니다.
![위젯 및 위젯 설명을 보여주는 위젯 선택 도구를 보여주는 이미지](https://developer.android.com/static/images/appwidgets/description.png?authuser=0000&hl=ko)
description
속성을 사용하여 위젯에 대한 설명을 제공합니다.
<appwidget-provider>
요소:
<appwidget-provider
android:description="@string/my_widget_description">
</appwidget-provider>
이
descriptionRes
드림
속성을 지원하지만 위젯에서 무시됩니다.
선택 도구를 클릭합니다.
더 원활한 전환 사용 설정
Android 12부터 런처는 사용자가 위젯에서 앱을 실행할 때 더 원활한 전환을 제공합니다.
이 개선된 전환을 사용 설정하려면 @android:id/background
나 android.R.id.background
를 사용하여 배경 요소를 식별합니다.
// Top-level layout of the widget.
<LinearLayout
android:id="@android:id/background">
</LinearLayout>
앱이 이전 버전의 Android에서 @android:id/background
을(를) 사용할 수 있습니다.
하지만 무시됩니다.
RemoteViews의 런타임 수정 사용
Android 12부터 몇 가지 이점을
RemoteViews
의 런타임 수정을 제공하는 RemoteViews
메서드
속성 RemoteViews
API를 참고하세요.
참조 문서를 참조하세요.
다음 코드 예는 이러한 메서드 중 몇 가지를 사용하는 방법을 보여줍니다.
Kotlin
// Set the colors of a progress bar at runtime. remoteView.setColorStateList(R.id.progress, "setProgressTintList", createProgressColorStateList()) // Specify exact sizes for margins. remoteView.setViewLayoutMargin(R.id.text, RemoteViews.MARGIN_END, 8f, TypedValue.COMPLEX_UNIT_DP)
Java
// Set the colors of a progress bar at runtime. remoteView.setColorStateList(R.id.progress, "setProgressTintList", createProgressColorStateList()); // Specify exact sizes for margins. remoteView.setViewLayoutMargin(R.id.text, RemoteViews.MARGIN_END, 8f, TypedValue.COMPLEX_UNIT_DP);