Basit bir widget oluşturma

Compose yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Compose tarzı API'leri kullanarak widget oluşturmayı öğrenin.

Uygulama widget'ları, diğer uygulamalara (ör. ana ekran) yerleştirebileceğiniz ve düzenli olarak güncellemeler alabileceğiniz minyatür uygulama görünümleridir. Bu görünümler, kullanıcı arayüzünde widget olarak adlandırılır ve bir uygulama widget'ı sağlayıcısı (veya widget sağlayıcı) ile yayınlayabilirsiniz. Diğer widget'ları barındıran uygulama bileşenine uygulama widget'ı ana makinesi (veya widget ana makinesi) adı verilir. Şekil 1'de örnek bir müzik widget'ı gösterilmektedir:

Müzik widget'ı örneği
Şekil 1. Müzik widget'ı örneği.

Bu belgede, bir widget sağlayıcı kullanarak widget'ların nasıl yayınlanacağı açıklanmaktadır. Uygulama widget'larına ev sahipliği yapmak için kendi AppWidgetHost öğenizi oluşturma hakkında ayrıntılı bilgi için Widget ana makinesi oluşturma başlıklı makaleyi inceleyin.

Widget'ınızı nasıl tasarlayacağınız hakkında bilgi edinmek için Uygulama widget'larına genel bakış başlıklı makaleyi inceleyin.

Widget bileşenleri

Widget oluşturmak için aşağıdaki temel bileşenlere ihtiyacınız vardır:

AppWidgetProviderInfo nesnesi
Widget'ın düzeni, güncelleme sıklığı ve AppWidgetProvider sınıfı gibi widget'ın meta verilerini açıklar. AppWidgetProviderInfo, bu belgede açıklandığı gibi XML'de tanımlanır.
AppWidgetProvider sınıfı
Widget'la programatik olarak arayüz oluşturmanızı sağlayan temel yöntemleri tanımlar. Bu sayede, widget güncellendiğinde, etkinleştirildiğinde, devre dışı bırakıldığında veya silindiğinde yayınlar alırsınız. Manifestte AppWidgetProvider beyanında bulunup bu dokümanda açıklandığı gibi uygulayın.
Düzeni göster
Widget'ın ilk düzenini tanımlar. Düzen, bu belgede açıklandığı gibi XML'de tanımlanır.

Şekil 2'de bu bileşenlerin genel uygulama widget'ı işleme akışına nasıl uyduğu gösterilmektedir.

Uygulama widget'ı işleme akışı
Şekil 2. Uygulama widget'ı işleme akışı.

Widget'ınızın kullanıcı yapılandırması gerekiyorsa uygulama widget'ı yapılandırma etkinliğini uygulayın. Bu etkinlik, kullanıcıların widget ayarlarını (ör. saat widget'ının saat dilimi) değiştirmesine olanak tanır.

Ayrıca şu iyileştirmeleri de öneririz: Esnek widget düzenleri, çeşitli geliştirmeler, gelişmiş widget'lar, koleksiyon widget'ları ve widget barındırma alanı oluşturma.

AppWidgetProviderInfo XML'ini bildirme

Meta veri ayarlarını (ör. varsayılan hücre boyutları, yeniden boyutlandırma kısıtlamaları ve güncelleme sıklıkları) tanımlama, hem geleneksel görünümlerde hem de bir bakışa dayalı widget'larda tamamen aynıdır.

Meta veri XML dosyanızı nasıl tanımlayacağınızı ve yapılandıracağınızı öğrenmek için Glance belgelerindeki Compose-first Declare the AppWidgetProviderInfo XML section (AppWidgetProviderInfo XML bölümünü bildirme) başlıklı makaleyi inceleyin.

Widget yayınlarını işlemek için AppWidgetProvider sınıfını kullanma

Platformun yayın alıcısı mekanizmaları, manifest bildirimi filtreleri ve yaşam döngüsü olay döngüleri platform altında birleştirilir. Compose-first geliştirme yaklaşımında bu yayınlar, GlanceAppWidgetReceiver sarmalayıcısı kullanılarak düzenlenir.

Alıcınızı manifestte nasıl kaydedeceğinizi ve Hilt ile uyumlu yaşam döngüsü geçersiz kılmalarını nasıl uygulayacağınızı öğrenmek için Glance belgelerindeki Compose-first Use the AppWidgetProvider class to handle broadcasts section (Yayınları işlemek için AppWidgetProvider sınıfını kullanma) bölümüne bakın.

Widget düzenini oluşturma

XML'de widget'ınız için bir başlangıç düzeni tanımlamanız ve bunu projenin res/layout/ dizinine kaydetmeniz gerekir. Ayrıntılar için Tasarım yönergeleri'ne bakın.

Düzenler hakkında bilginiz varsa widget düzenini oluşturmak kolaydır. Ancak widget düzenlerinin RemoteViews tabanlı olduğunu ve her tür düzeni veya görünüm widget'ını desteklemediğini unutmayın. RemoteViews tarafından desteklenen görünümlerin özel görünümlerini veya alt sınıflarını kullanamazsınız.

RemoteViews, ViewStub öğesini de destekler. Bu öğe, düzen kaynaklarını çalışma zamanında geç yüklemek için kullanabileceğiniz görünmez ve sıfır boyutlu bir View'dir.

Durum bilgili davranış desteği

Android 12, aşağıdaki mevcut bileşenleri kullanarak durum bilgisi olan davranış desteği ekler:

Widget hâlâ durum bilgisizdir. Uygulamanız durumu saklamalı ve durum değişikliği etkinliklerine kaydolmalıdır.

Durumlu davranışı gösteren alışveriş listesi widget'ı örneği
Şekil 3. Durumlu davranış örneği.

Aşağıdaki kod örneğinde bu bileşenlerin nasıl uygulanacağı gösterilmektedir.

Kotlin

// 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)
)

Java

// 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));

İki düzen sağlayın: Biri res/layout-v31 klasöründe Android 12 veya sonraki sürümleri çalıştıran cihazları, diğeri ise varsayılan res/layout klasöründe önceki Android 11 veya önceki sürümleri hedefleyen düzen.

Yuvarlak köşeleri uygulama

Dış arka planı ve iç orantılı yarıçapları hesaplamak standarttır ve paylaşılır. Compose ile geliştirme yaklaşımında bu, Kotlin'de özel tema kaynaklarıyla birlikte dinamik olarak ayarlanabilir.

Köşe yarıçaplarını uygulamak veya eski Android cihazlar için dinamik stiller ayarlamak istiyorsanız Glance belgelerindeki Compose-first Yuvarlatılmış köşeleri uygulama bölümüne bakın.