Bu sayfada, Android 12 (API düzeyi 31) ve sonraki sürümlerde kullanılabilen isteğe bağlı widget geliştirmeleriyle ilgili ayrıntılar yer alır. Bu özellikler isteğe bağlıdır ancak uygulanması kolaydır ve kullanıcılarınızın widget deneyimini iyileştirir.
Widget'ınızı geliştirmenin diğer yolları için Widget'ınızı geliştirme başlıklı Compose kılavuzuna bakın.
Dinamik renkleri kullanma
Android 12'den itibaren widget'lar düğmeler, arka planlar ve diğer bileşenler için cihaz teması renklerini kullanabilir. Bu sayede farklı widget'lar arasında daha sorunsuz geçişler ve tutarlılık sağlanır.
Dinamik renkleri iki şekilde elde edebilirsiniz:
Kök düzende sistemin varsayılan temasını (
@android:style/Theme.DeviceDefault.DayNight) kullanın.Android için Material Bileşenleri v1.6.0 sürümünden itibaren kullanılabilen Android için Material Bileşenleri kitaplığındaki Material 3 temasını (
Theme.Material3.DynamicColors.DayNight) kullanın.
Tema, kök düzende ayarlandıktan sonra dinamik renkleri seçmek için kökte veya alt öğelerinden herhangi birinde ortak renk özelliklerini kullanabilirsiniz.
Kullanabileceğiniz renk özelliklerine dair bazı örnekler aşağıda verilmiştir:
?attr/primary?attr/primaryContainer?attr/onPrimary?attr/onPrimaryContainer
Material 3 temasının kullanıldığı aşağıdaki örnekte cihazın tema rengi "morumsu"dur. Vurgu rengi ve widget arka planı, Şekil 1 ve 2'de gösterildiği gibi açık ve koyu modlara uyum sağlar.
<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 android:layout_width="wrap_content" android:layout_height="wrap_content" app:tint="?attr/colorPrimaryContainer" android:src="@drawable/ic_cloud" /> <!-- Other widget content. --> </LinearLayout>
Dinamik renkler için geriye dönük uyumluluk
Dinamik renkler yalnızca Android 12 veya sonraki sürümlerin yüklü olduğu cihazlarda kullanılabilir. Daha eski sürümler için özel bir tema sağlamak istiyorsanız özel renklerinizle varsayılan bir tema ve varsayılan tema özelliklerini kullanarak yeni bir niteleyici (values-v31) oluşturun.
Material 3 temasını kullanan bir örnek:
/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
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="?android:attr/colorBackground" android:theme="@style/MyWidgetTheme" />
Ses desteğini etkinleştirme
Uygulama İşlemleri, Google Asistan'ın alakalı kullanıcı sesli komutlarına yanıt olarak widget'lar göstermesini sağlar. Widget'ınızı yerleşik amaçlara (BII'ler) yanıt verecek şekilde yapılandırarak uygulamanızın Android ve Android Auto gibi Asistan platformlarında proaktif olarak widget göstermesini sağlayabilirsiniz. Kullanıcılar, Asistan tarafından gösterilen widget'ları başlatıcılarına sabitleyerek gelecekteki etkileşimi teşvik edebilir.
Örneğin, egzersiz uygulamanızın antrenman özeti widget'ını, GET_EXERCISE_OBSERVATION yerleşik intent'ini tetikleyen kullanıcı sesli komutlarını yerine getirecek şekilde yapılandırabilirsiniz. Kullanıcılar, "Ok Google, bu hafta ExampleApp'te kaç kilometre koştum?" gibi isteklerde bulunarak bu BII'yi tetiklediğinde Asistan, widget'ınızı proaktif olarak gösterir.
Kullanıcı etkileşiminin çeşitli kategorilerini kapsayan onlarca BII vardır. Bunlar, neredeyse tüm Android uygulamalarının widget'larını ses için geliştirmesine olanak tanır. Başlamak için Uygulama İşlemleri'ni Android widget'larıyla entegre etme başlıklı makaleyi inceleyin.
Daha akıcı geçişler sağlayın
Android 12'den itibaren başlatıcılar, kullanıcı uygulamanızı bir widget'tan başlattığında daha sorunsuz bir geçiş sağlar.
Bu iyileştirilmiş geçişi etkinleştirmek için arka plan öğenizi tanımlamak üzere @android:id/background veya android.R.id.background kullanın:
<!-- Top-level layout of the widget. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/background" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> </LinearLayout>
Uygulamanız, Android'in önceki sürümlerinde @android:id/background özelliğini sorunsuz bir şekilde kullanabilir ancak bu özellik yok sayılır.
RemoteViews'un çalışma zamanı değişikliğini kullanma
Android 12'den itibaren, RemoteViews özelliklerinin çalışma zamanında değiştirilmesini sağlayan çeşitli RemoteViews yöntemlerinden yararlanabilirsiniz. Eklenen yöntemlerin tam listesi için RemoteViews API referansına bakın.
Aşağıdaki kod örneğinde, bu yöntemlerden bazılarının nasıl kullanılacağı gösterilmektedir.
// 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_DIP )