Android destekli çoğu cihazda bulunan Android ana ekranı,
kullanıcı tarafından yerleşik uygulama widget'ları (veya widget'lar)
hızlı erişim sağlar. Ana ekran değişimi oluşturuyorsanız veya
veya başka bir uygulamaya konduktan sonra, kullanıcının widget'ları
AppWidgetHost
. Bu değil
çoğu uygulamanın yapması gereken bir şeydir. Ancak kendi ana makinenizi oluşturuyorsanız
web sitesinin içerik sahibinin dolaylı olarak kabul ettiği sözleşme yükümlülüklerini anlamak önemlidir.
Bu sayfada, özel bir özelleştirmenin uygulanmasıyla ilgili sorumluluklara
AppWidgetHost
AppWidgetHost
özelliğinin nasıl uygulanacağına dair belirli bir örnek için
Android ana ekranının kaynak koduna bakın
LauncherAppWidgetHost
Aşağıda, bir proje yönetimi yaklaşımının uygulanmasında
yer alan temel sınıflar ve
özel AppWidgetHost
:
Uygulama widget'ı ana makinesi:
AppWidgetHost
, Kullanıcı arayüzlerine widget yerleştiren uygulamalar için AppWidget hizmeti.AppWidgetHost
ana makinenin kendi paketi içinde benzersiz bir kimliğe sahip olmalıdır. Bu kimlik devam ediyor kullanımında yardımcı olur. Kimlik, genellikle atamanıza olanak tanır.Uygulama widget kimliği: Her widget örneğine her seferinde benzersiz bir kimlik atanır . Görüntüleyin
bindAppWidgetIdIfAllowed()
Daha ayrıntılı bilgi için bir sonraki Widget'ları bağlama bölümüne bakın. İlgili içeriği oluşturmak için kullanılan benzersiz kimliği elde eder.allocateAppWidgetId()
. Bu kimlik, widget'tan silinene kadar widget'ın ömrü boyunca kalır. ana bilgisayar. Ana makineye özgü bir durum (örneğin, widget'ı—barındırma paketi tarafından saklanmalı ve uygulama widget'ı kimliği.Uygulama widget'ı ana makine görünümü: Çerçeve olarak
AppWidgetHostView
widget'ın gösterilmesi gerektiğinde sarmalanması gerekir. Widget, birAppWidgetHostView
ile ilişkilendirilir. ana bilgisayar.- Varsayılan olarak sistem bir
AppWidgetHostView
oluşturur, ancak ana makine şunları yapabilir: kapsamını genişleterek kendiAppWidgetHostView
alt sınıfını oluşturabilir. AppWidgetHostView
, Android 12'den (API düzeyi 31) başlayarak "the"setColorResources()
veresetColorResources()
ve dinamik olarak aşırı yüklenen renklerin nasıl ele alınacağını öğrenin. Düzenleyen: bu yöntemlerin renklerini sağlamaktan sorumludur.
- Varsayılan olarak sistem bir
Seçenekler paketi:
AppWidgetHost
, seçenekler paketini kullanarak ilgili kişiyeAppWidgetProvider
hakkında bilgi edinin (örneğin, boyut aralıklarının listesini ve widget'ı kilit ekranında veya ana ekranda bulunuyor. Bu bilgiler,AppWidgetProvider
, widget'ın içeriğini ve görünümünü nasıl ve nasıl gösterildiği yeri seçin. Tekliflerinizi otomatikleştirmek ve optimize etmek içinupdateAppWidgetOptions()
veupdateAppWidgetSize()
widget'ın grubunu değiştirin. Bu yöntemlerin her ikisi deonAppWidgetOptionsChanged()
AppWidgetProvider
için geri arama.
Widget'ları bağlama
Kullanıcı, ana makineye bir widget eklediğinde bağlama adı verilen bir işlem gerçekleşir. Bağlama
belirli bir uygulama widget kimliğinin belirli bir ana makine ve
belirli AppWidgetProvider
.
Bağlama API'leri, ana makinenin
bağlama'yı tıklayın. Bu işlemi kullanmak için uygulamanızın şunu beyan etmesi gerekir:
BIND_APPWIDGET
izni içermelidir:
<uses-permission android:name="android.permission.BIND_APPWIDGET" />
Ancak bu sadece başlangıç. Çalışma zamanında, kullanıcı
ana makineye bir widget eklemesine izin vermek için uygulamanıza izin verin.
uygulamanızın widget ekleme izni varsa
bindAppWidgetIdIfAllowed()
yöntemidir. bindAppWidgetIdIfAllowed()
, false
sonucu döndürürse uygulamanız bir
kullanıcıdan izin vermesini isteyen iletişim kutusu: "izin ver" (geçerli widget için)
ekleme veya "her zaman izin ver" dahil edeceğiz.
Bu snippet, iletişim kutusunun nasıl gösterileceğine dair bir örnek sunar:
Kotlin
val intent = Intent(AppWidgetManager.ACTION_APPWIDGET_BIND).apply { putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, info.componentName) // This is the options bundle described in the preceding section. putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options) } startActivityForResult(intent, REQUEST_BIND_APPWIDGET)
Java
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, info.componentName); // This is the options bundle described in the preceding section. intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options); startActivityForResult(intent, REQUEST_BIND_APPWIDGET);
Barındırıcı, bir kullanıcının eklediği widget'ın yapılandırılmasına ihtiyaç olup olmadığını kontrol etmelidir. Örneğin, Daha fazla bilgi için Kullanıcıların uygulamayı yapılandırmasını etkinleştirme widget'ları hakkında daha fazla bilgi edinin.
Ev sahibi olma sorumlulukları
Widget'lar için
AppWidgetProviderInfo
meta verileri.
Daha ayrıntılı olarak açıklanan bu yapılandırma seçeneklerini şu sayfada bulabilirsiniz:
aşağıdaki bölümlerden
AppWidgetProviderInfo
Bir widget sağlayıcıyla ilişkilendirilmiş nesne.
Hedeflediğiniz Android sürümü ne olursa olsun, tüm ana makinelerde aşağıdaki sorumluluklardan yararlanabilirsiniz:
Widget eklerken, widget kimliğini daha önce açıklandığı şekilde atayın. Bir widget, düzenleyenden kaldırıldı.
deleteAppWidgetId()
izin verir.Widget eklerken, yapılandırmak istediğiniz yapılandırma kullanıma sunuldu. Genellikle ana makinenin widget yapılandırmasını başlatması gerekir etkinliği varsa ve isteğe bağlı olarak işaretlenmemişse
configuration_optional
vereconfigurable
işaretleri. Görüntüleyin Widget'ı yapılandırma etkinliğinden güncelleme inceleyebilirsiniz. Bu, birçok widget'ın gösterilebilmesi için gerekli bir adımdır.Widget'lar,
AppWidgetProviderInfo
içinde varsayılan bir genişlik ve yükseklik belirtir meta verilerdir. Bu değerler hücrelerde tanımlanır vetargetCellWidth
vetargetCellHeight
geçerliyse Android 12 belirtilir (veya yalnızcaminWidth
veminHeight
belirtilirse dps). Görüntüleyin Widget boyutlandırma özellikleri.Widget'ın en az bu kadar dps ile yerleştirildiğinden emin olun. Örneğin, Birçok ana makine, simgeleri ve widget'ları bir ızgarada hizalar. Bu senaryoda, ana makine, widget'ı eklemek için kullanacağınız minimum hücre sayısını
minWidth
veminHeight
kısıtlamalarını karşılamalıdır.
Önceki bölümde listelenen şartlara ek olarak, platform sürümleri, kullanıcılara yeni sorumluluklar veren özellikler ana bilgisayar.
Hedeflenen Android sürümüne göre yaklaşımınızı belirleyin
Android 12
Android 12 (API düzeyi 31), bu listeyi içeren ek bir List<SizeF>
içerir
bir widget örneğinin seçenekler paketinde alabileceği dps cinsinden olası boyutlardadır.
Sağlanan boyutların sayısı, ana makine uygulamasına bağlıdır. Düzenleyenler genelde
Telefonlar için iki boyut (dikey ve yatay) ve dört boyutlu
katlanabilir cihazlar da var.
Farklı öğe sayısı için MAX_INIT_VIEW_COUNT
(16) sınır vardır
AppWidgetProvider
tarafından sağlanan RemoteViews
RemoteViews
.
AppWidgetProvider
nesneleri, bir RemoteViews
nesnesini
List<SizeF>
, en fazla MAX_INIT_VIEW_COUNT
boyut sağlayın.
Android 12, ayrıca
maxResizeWidth
ve
maxResizeHeight
özellikleri hakkında daha fazla bilgi edinin. Bu özelliklerden en az birini kullanan bir widget'ın
özelliklerinin belirtilen boyutu aşmaması.
Ek kaynaklar
Glance
referans belgelerini inceleyin.