Uygulama widget'ları yapılandırılabilir. Örneğin, saat widget'ı, kullanıcıların hangi saat diliminin gösterileceğini yapılandırmasına olanak tanıyabilir.
Kullanıcıların widget 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 tanımlayın. Uygulama widget'ı ana makinesi, widget'ı ACTION_APPWIDGET_CONFIGURE
işlemiyle başlatır. Bu nedenle, etkinliğin bu niyeti 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 tanımlayın. Bu dosyayı bildirme hakkında daha fazla bilgi edinin. Yapılandırma etkinliğinin nasıl bildirileceğine dair bir örnek:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
...
android:configure="com.example.android.ExampleAppWidgetConfigurationActivity"
... >
</appwidget-provider>
Başlatıcı, paket kapsamınızın dışından etkinliğe referans verdiği için etkinlik, tam nitelikli ad alanıyla tanımlanır.
Yapılandırma etkinliği başlatmak için tüm yapmanız gereken bu. Daha sonra, gerçekleşen etkinliği uygulamanız gerekir.
Yapılandırma etkinliğini uygulama
Etkinliği uygularken unutmamanız gereken iki önemli nokta vardır:
- Uygulama widget'ı ana makinesi yapılandırma etkinliğini çağırır ve yapılandırma etkinliği her zaman bir sonuç döndürmelidir. Sonuç, etkinliği başlatan intent tarafından iletilen ve intent ekstralarına
EXTRA_APPWIDGET_ID
olarak kaydedilen App Widget kimliğini içermelidir. - Bir yapılandırma etkinliği başlatıldığında sistem
ACTION_APPWIDGET_UPDATE
yayını göndermez. Diğer bir deyişle, widget oluşturulduğundaonUpdate()
yöntemini çağırmazsınız. Widget'ı ilk kez oluştururkenAppWidgetManager
uygulamasından güncelleme istemek yapılandırma etkinliğinin sorumluluğundadır. Bununla birlikte,onUpdate()
sonraki güncellemeler için çağrılır; yalnızca ilk seferde atlanır.
Yapılandırmadan bir sonuç döndürme ve widget'ı güncelleme hakkında örnek için aşağıdaki bölümde yer alan kod snippet'lerini inceleyin.
Widget'ı yapılandırma etkinliğinden güncelleme
Bir widget, yapılandırma etkinliği kullandığında, yapılandırma tamamlandığında widget'ın güncellenmesi bu etkinliğin sorumluluğundadır. Doğrudan AppWidgetManager
üzerinden güncelleme isteğinde bulunarak bu işlemi yapabilirsiniz.
Widget'ı doğru şekilde güncelleme ve yapılandırma etkinliğini kapatma prosedürünün bir özetini burada bulabilirsiniz:
Etkinliği başlatan intent'den App 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 ayrılırsa sistem, yapılandırmanın iptal edildiğini ve ana makinenin widget'ı eklemediğini uygulama widget'ı ana makinesine 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)
çağrısı yaparakAppWidgetManager
öğesinin bir örneğini alın:Kotlin
val appWidgetManager = AppWidgetManager.getInstance(context)
Java
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
updateAppWidget(int,RemoteViews)
numaralı telefonu arayarak widget'ıRemoteViews
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);
İade 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 bir kez başlatır. Bununla birlikte, varsayılan widget yapılandırması sağlayarak kullanıcıların mevcut widget'ları yeniden yapılandırmasına veya 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ı etkinleştir
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 için AppWidgetProviderInfo.xml
dosyasını tanımlama kılavuzuna bakın. Örnek:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable">
</appwidget-provider>
Kullanıcılar, widget'a dokunup basılı tuttuktan sonra Şekil 1'de 1 olarak etiketlenmiş 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şaretini belirtin. Bu, bir kullanıcı widget'ı ekledikten sonra yapılandırma etkinliğinin başlatılmasını atlar. Daha önce de 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şaretleyeceğinize dair bir örneği aşağıda bulabilirsiniz:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable|configuration_optional">
</appwidget-provider>