Uygulama widget'ları yapılandırılabilir olabilir. Örneğin, bir saat widget'ı, kullanıcıların görüntülenecek saat dilimini yapılandırmasına olanak tanır.
Kullanıcıların widget'ınızın ayarlarını yapılandırmasına izin vermek istiyorsanız bir widget yapılandırması Activity
oluşturun. Bu etkinlik, belirlediğiniz yapılandırma seçeneklerine bağlı olarak widget oluşturulduğunda veya daha sonra uygulama widget'ı ana makinesi tarafından otomatik olarak başlatılır.
Yapılandırma etkinliğini bildirme
Yapılandırma etkinliğini, Android manifest dosyasında normal etkinlik olarak bildirin. Uygulama widget'ı barındırıcısı, widget'ı ACTION_APPWIDGET_CONFIGURE
işlemiyle başlatır, dolayısıyla etkinliğin bu amacı kabul etmesi gerekir. Örnek:
<activity android:name=".ExampleAppWidgetConfigurationActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
AppWidgetProviderInfo.xml
dosyasındaki etkinliği android:configure
özelliğiyle bildirin. Bu dosyayı bildirme hakkında daha fazla bilgi edinin. Aşağıda, yapılandırma etkinliğinin nasıl tanımlanacağına dair bir örnek verilmiştir:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
...
android:configure="com.example.android.ExampleAppWidgetConfigurationActivity"
... >
</appwidget-provider>
Başlatıcı, paketinizin kapsamının dışından bu etkinliğe referans verdiğinden, etkinlik tam nitelikli bir ad alanı ile tanımlanır.
Bir yapılandırma etkinliği başlatmak için tek ihtiyacınız olan bu. Ardından, asıl etkinliği uygulamanız gerekir.
Yapılandırma etkinliğini uygulama
Etkinliği uygularken göz önünde bulundurmanız gereken iki önemli nokta vardır:
- Uygulama widget'ı ana makinesi, yapılandırma etkinliğini çağırır ve yapılandırma etkinliğinin her zaman bir sonuç döndürmesi gerekir. Sonuç, etkinliği başlatan amaç tarafından iletilen Uygulama Widget'ı Kimliğini içermelidir. Amaç ekstralarına
EXTRA_APPWIDGET_ID
olarak kaydedilmiştir. - Sistem, bir yapılandırma etkinliği başlatıldığında
ACTION_APPWIDGET_UPDATE
yayınını göndermez, yani widget oluşturulduğundaonUpdate()
yöntemini çağırmaz. Widget'ı ilk kez oluştururkenAppWidgetManager
ürününden güncelleme isteğinde bulunmak yapılandırma etkinliğinin sorumluluğundadır. AncakonUpdate()
sonraki güncellemeler için çağrılır; yalnızca ilk seferde atlanır.
Yapılandırmadan bir sonucun nasıl döndürüleceğine ve widget'ın nasıl güncelleneceğine dair bir örnek için aşağıdaki bölümde yer alan kod snippet'lerine bakın.
Yapılandırma etkinliğinden widget'ı güncelleme
Bir widget, yapılandırma etkinliği kullandığında, yapılandırma tamamlandığında widget'ı güncellemek etkinliğin sorumluluğundadır. Bunun için doğrudan AppWidgetManager
üzerinden güncelleme isteğinde bulunabilirsiniz.
Widget'ı düzgün bir şekilde güncelleme ve yapılandırma etkinliğini kapatma prosedürünün özetini burada bulabilirsiniz:
Etkinliği başlatan niyetten Uygulama Widget'ı Kimliği'ni alın:
Kotlin
val appWidgetId = intent?.extras?.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID ) ?: AppWidgetManager.INVALID_APPWIDGET_ID
Java
Intent intent = getIntent(); Bundle extras = intent.getExtras(); int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; if (extras != null) { appWidgetId = extras.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); }
Etkinlik sonucunu
RESULT_CANCELED
olarak ayarlayın.Bu şekilde, kullanıcı sona ulaşmadan etkinlikten çekilirse sistem, uygulama widget'ı ana makinesine yapılandırmanın iptal edildiğini ve ana makinenin widget'ı eklemediğini bildirir:
Kotlin
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) setResult(Activity.RESULT_CANCELED, resultValue)
Java
int resultValue = new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult(Activity.RESULT_CANCELED, resultValue);
Widget'ı kullanıcının tercihlerine göre yapılandırın.
Yapılandırma tamamlandığında
getInstance(Context)
yöntemini çağırarakAppWidgetManager
öğesinin bir örneğini alın:Kotlin
val appWidgetManager = AppWidgetManager.getInstance(context)
Java
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
updateAppWidget(int,RemoteViews)
yöntemini çağırarak widget'ı birRemoteViews
düzeniyle güncelleyin:Kotlin
val views = RemoteViews(context.packageName, R.layout.example_appwidget) appWidgetManager.updateAppWidget(appWidgetId, views)
Java
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget); appWidgetManager.updateAppWidget(appWidgetId, views);
Dönüş amacını oluşturun, etkinlik sonucuyla ayarlayın ve etkinliği tamamlayın:
Kotlin
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) setResult(Activity.RESULT_OK, resultValue) finish()
Java
Intent resultValue = new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult(RESULT_OK, resultValue); finish();
Örnek için GitHub'daki ListWidgetConfigureActivity.kt
örnek sınıfını inceleyin.
Widget yapılandırma seçenekleri
Varsayılan olarak, uygulama widget'ı ana makinesi, yapılandırma etkinliğini yalnızca kullanıcı widget'ı ana ekranına ekledikten hemen sonra başlatır. Ancak, kullanıcıların mevcut widget'ları yeniden yapılandırmasına veya varsayılan bir widget yapılandırması sağlayarak ilk widget yapılandırmasını atlamasına olanak tanıyan seçenekler belirleyebilirsiniz.
Kullanıcıların, yerleştirilmiş widget'ları yeniden yapılandırmasını sağlama
Kullanıcıların mevcut widget'ları yeniden yapılandırmasına izin vermek için appwidget-provider
öğesinin widgetFeatures
özelliğinde reconfigurable
işaretini belirtin. Daha fazla bilgi edinmek için AppWidgetProviderInfo.xml
dosyasını bildirme kılavuzunu inceleyin. Örnek:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable">
</appwidget-provider>
Kullanıcılar, widget'a dokunup basılı tutarak ve Şekil 1'de 1 olarak etiketlenmiş olan Yeniden yapılandır düğmesine dokunarak widget'larını yeniden yapılandırabilir.
Widget'ın varsayılan yapılandırmasını kullan
Kullanıcıların ilk yapılandırma adımını atlamasına izin vererek daha sorunsuz bir widget deneyimi sunabilirsiniz. Bunu yapmak için widgetFeatures
alanında hem configuration_optional
hem de reconfigurable
işaretlerini belirtin. Bu ayar, kullanıcı widget'ı ekledikten sonra yapılandırma etkinliğinin başlatılmasını atlar. Önceden belirtildiği gibi, kullanıcı daha sonra widget'ı yeniden yapılandırabilir. Örneğin, bir saat widget'ı ilk yapılandırmayı atlayabilir ve varsayılan olarak cihazın saat dilimini gösterebilir.
Yapılandırma etkinliğinizi hem yeniden yapılandırılabilir hem de isteğe bağlı olarak nasıl işaretleyebileceğinizle ilgili bir örneği aşağıda bulabilirsiniz:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable|configuration_optional">
</appwidget-provider>
Kullanıcıların widget'ı sabitlemesine izin verme
Android 8.0 (API düzeyi 26) ve sonraki sürümleri çalıştıran cihazlarda, kullanıcıların sabitlenmiş kısayollar oluşturmasına olanak tanıyan başlatıcılar, widget'ları ana ekranlarına sabitlemelerine de olanak tanır. Aşağıdaki videoda gösterildiği gibi, sabitlenen kısayollara benzer şekilde, bu sabitlenmiş widget'lar kullanıcıların uygulamanızdaki belirli görevlere erişmesini sağlar ve doğrudan uygulamadan ana ekrana eklenebilir.
Uygulamanızda, aşağıdaki adımları tamamlayarak sistemin bir widget'ı desteklenen bir başlatıcıya sabitlemesi için istek oluşturabilirsiniz:
Uygulamanızın manifest dosyasında bir widget bildirdiğinizden emin olun.
Aşağıdaki kod snippet'inde gösterildiği gibi
requestPinAppWidget()
yöntemini çağırın:
Kotlin
val appWidgetManager = AppWidgetManager.getInstance(context) val myProvider = ComponentName(context, ExampleAppWidgetProvider::class.java) if (appWidgetManager.isRequestPinAppWidgetSupported()) { // Create the PendingIntent object only if your app needs to be notified // when the user chooses to pin the widget. Note that if the pinning // operation fails, your app isn't notified. This callback receives the ID // of the newly pinned widget (EXTRA_APPWIDGET_ID). val successCallback = PendingIntent.getBroadcast( /* context = */ context, /* requestCode = */ 0, /* intent = */ Intent(...), /* flags = */ PendingIntent.FLAG_UPDATE_CURRENT) appWidgetManager.requestPinAppWidget(myProvider, null, successCallback) }
Java
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); ComponentName myProvider = new ComponentName(context, ExampleAppWidgetProvider.class); if (appWidgetManager.isRequestPinAppWidgetSupported()) { // Create the PendingIntent object only if your app needs to be notified // when the user chooses to pin the widget. Note that if the pinning // operation fails, your app isn't notified. This callback receives the ID // of the newly pinned widget (EXTRA_APPWIDGET_ID). PendingIntent successCallback = PendingIntent.getBroadcast( /* context = */ context, /* requestCode = */ 0, /* intent = */ new Intent(...), /* flags = */ PendingIntent.FLAG_UPDATE_CURRENT); appWidgetManager.requestPinAppWidget(myProvider, null, successCallback); }