Uygulamanız için bir Android Widget Oluşturun

Yazar: Lewis Jackson
Yaratılış Tarihi: 13 Mayıs Ayı 2021
Güncelleme Tarihi: 1 Temmuz 2024
Anonim
Uygulamanız için bir Android Widget Oluşturun - Uygulamaların
Uygulamanız için bir Android Widget Oluşturun - Uygulamaların

İçerik


İşletim sisteminin ilk günlerinden beri, Android için widget'lar kullanıcıların ana ekranlarının konforundan en sevdikleri uygulamalarla etkileşime girmelerini sağladı. Peki nasıl bir Android widget'ı yaratırsınız?

Geliştirici için widget, uygulamanıza kullanıcının ana ekranında değerli bir varlık sunar. Uygulama çekmecesinde gözden kaçmak yerine, kullanıcılara uygulamanız hakkında hatırlatma yapılır. her seferinde Ana ekranlarına bakarlar - aynı zamanda uygulamanızın en ilginç ve kullanışlı içeriğinin bir önizlemesini alırlar.

Widget'lar uygulamanıza, kullanıcının ana ekranında değerli bir varlık sunar

Bu makalede, bir Android widget'ı oluşturarak kullanıcıları uygulamanıza katılmaya teşvik ederken size nasıl daha iyi bir kullanıcı deneyimi sunacağınızı göstereceğim! Bu makalenin sonunda, kullanıcının ana ekranında tam bir veri seti görüntüleyen kaydırılabilir bir koleksiyon widget'ı oluşturmuş olacaksınız.


Kullanıcıların kullandığı widget türünü yayınladığınızdan emin olmak için istemek Ana ekranlarına yerleştirmek için, kullanıcıların widget'in içeriğini, görünümünü ve özelliklerini özelleştirmelerine olanak tanıyan bir yapılandırma Etkinliği de oluşturacağız. Son olarak, widget'ınızın sunabileceği en iyi şeyi gösteren bir Widget Önizleme görüntüsü oluşturarak insanları widget'inizi nasıl kullanmaya teşvik edebileceğinizi göstereceğim.

Ayrıca şunu da oku: Katlanabilir cihazlar için geliştirme: Bilmeniz gerekenler

Android için widget nedir?

Bir uygulama widget'ı, kullanıcının ana ekranında yaşayan hafif ve minyatür bir uygulamadır.

Android için pencere öğeleri çeşitli içerikler sağlayabilir, ancak genellikle aşağıdaki kategorilerden birine girer:


  • Bilgi gereci. Bu, bugünün hava durumu tahmini veya tarih ve saat gibi bazı bilgileri görüntüleyen kaydırılamaz bir widget.
  • Koleksiyon widget'ları. Bu, ListView, GridView, StackView veya AdapterViewFlipper olarak biçimlendirilmiş bir dizi ilgili veriyi gösteren kaydırılabilir bir widget. Koleksiyon widget'ları genellikle veritabanı veya Dizi gibi bir veri kaynağı tarafından desteklenir.
  • Kontrol widget'ları. Bu widget'lar, kullanıcıların uygulamanızla etkileşime girmelerini sağlayan bir uzaktan kumanda görevi görür, olmadan ön plana getirmek zorunda. Podcast veya müzik gibi medya yürüten uygulamalar, sıklıkla kullanıcının Oynat, Duraklat ve Atla işlemlerini doğrudan ana ekranlarından tetiklemesine olanak sağlayan kontrol widget'larına sahiptir.
  • Hibrit aletler. Bazen birden fazla kategorideki öğeleri birleştirerek daha iyi bir kullanıcı deneyimi sunabilirsiniz. Örneğin, bir müzik uygulaması için bir kontrol widget'ı geliştiriyorsanız Çal, Duraklat ve Atla kontrollerini sağlayabilirsiniz, ancak şarkının adı ve sanatçısı gibi bazı bilgileri de görüntülemeye karar verebilirsiniz. Karıştırmaya ve eşleştirmeye karar verirseniz, başka yere gitme! Widget'lar, az miktarda zamanında, ilgili bilgilere veya sık kullanılan birkaç özelliğe kolay erişim sağlarken en iyi kullanıcı deneyimini sunma eğilimindedir. Hibrit widget'larınızın hafif kalmasına yardımcı olmak için, widget'ınızın birincil kategorisini tanımlamanız, bu kategoriye göre geliştirmeniz ve sonra widget’ın ikincil kategorisinden birkaç öğe ekleyin.

Projemin gerçekten bir uygulama widget'ına ihtiyacı var mı?

Android projenize uygulama widget'ı eklemeyi düşünmenizin birkaç nedeni var.

Android için widget'lar kullanıcı deneyimini geliştirebilir

Genel bir kural olarak, bir görevi tamamlamak için gereken gezinme adımları ne kadar az olursa, kullanıcı deneyimi o kadar iyi olur.

Bir uygulama widget'ı sağlayarak, uygulamanızın en sık kullanılan akışlarından birden çok gezinme adımını kaldırabilirsiniz. En iyi senaryoda, kullanıcılarınız ihtiyaç duydukları bilgileri yalnızca ana ekranlarına göz atarak ya da kontrol widget'inizdeki bir düğmeye dokunarak istenen görevi yerine getirebilecekler.

Uygulama kısayollarından daha güçlü

Uygulama widget'ları, bir uygulama kısayoluna benzer şekilde, ilişkili uygulamadaki en üst seviyeyi başlatarak onClick olaylarına yanıt verir. Bununla birlikte, widget'lar bir uygulamadaki belirli Faaliyetlere doğrudan erişim de sağlayabilir; örneğin, bir widget’in Yeni Alınan bildirimi seçeneğine dokunduğunuzda yeni açılmış olan ilişkili uygulamayı başlatabilirsiniz.

Widget’ınızın düzenine birden çok bağlantı ekleyerek, en sık kullandığınız akışlardan daha fazla gezinme adımını kaldırarak uygulamanızın en önemli Etkinliklerinin tümüne tek dokunuşla erişim sağlayabilirsiniz.

Widget’ınızın düzenine birden çok bağlantı ekleyerek, uygulamanızın en önemli Etkinliklerinin tümüne tek dokunuşla erişim sağlayabilirsiniz.

Pencere öğelerinin yalnızca onClick etkinliklerine yanıt verdiğini ve kullanıcıların ana ekranda dolaşırken yanlışlıkla pencere öğenizle etkileşime girmelerini önlediğini unutmayın. Bunun tek istisnası, kullanıcı widget'ınızı ana ekranın Kaldır eylemine sürükleyerek silmeye çalışırken olmasıdır. Bu senaryoda olduğu gibi, widget'ınız dikey kaydırma hareketine yanıt verir.

Bu etkileşim Android sistemi tarafından yönetilir, bu nedenle widget'ınıza dikey kaydırma desteğini elle uygulamak konusunda endişelenmenize gerek yoktur.

Uzun süreli etkileşimi sağlamak için bir Android widget'ı oluşturun

İnsanları uygulamanızı indirmeye ikna etmek, başarılı bir Android uygulaması oluşturmanın ilk adımıdır. Muhtemelen, kendi Android akıllı telefonunuzu veya tabletinizi alıp uygulama çekmecesini kaydırdığınızda, o zaman günlerde, haftalarda veya hatta aylarca kullanmadığınız birden fazla uygulamayı keşfedeceksiniz!

Ayrıca oku:Android SDK için Facebook'a Başlarken

Uygulamanız kullanıcının cihazına başarıyla kurulduktan sonra, onları meşgul etmek ve uygulamanızın keyfini çıkarmak için çok çalışmanız gerekir. Uygulamanızın ana ekran üzerinde bir varlık göstermesi, uygulamanızın var olduğunu sürekli hatırlatması nedeniyle, uzun süreli etkileşime yardımcı olacak güçlü bir araç olabilir!

İyi tasarlanmış bir widget, uygulamanız için sürekli bir reklam görevi de görebilir. Kullanıcı ana ekranına her baktığında, widget'ınız uygulamanızın en ilginç ve kullanışlı içeriğini sunarak onları uygulamanızla tekrar etkileşime girmelerini teşvik etme fırsatına sahiptir.

Koleksiyon uygulaması widget'ı oluşturma

Bu eğiticide, bir diziyi kaydırılabilir ListView olarak görüntüleyen bir koleksiyon widget'ı oluşturacağız.

Uygulama widget'ı yaşam döngüsünü izlemenize yardımcı olmak için, bu widget aynı zamanda farklı yaşam döngüsü durumlarında hareket ederken çeşitli kızartmaları da tetikleyecektir. Bu eğitimin sonuna doğru, widget'ımızı, Android'in Widget Seçici'sinde görüntülenecek olan özel bir önizleme görüntüsü ve kullanıcıların widget'ı ana ekranlarına yerleştirmeden önce kişiselleştirmelerini sağlayacak bir yapılandırma Etkinliği ile geliştireceğiz.

İstediğiniz ayarlarla yeni bir Android projesi oluşturun ve başlayalım!

Widget’ınızın düzenini oluşturma

Başlamak için, widget’ın kullanıcı arayüzünü (UI) tanımlayalım.

Uygulama widget'ları bir işlemde görüntülenir dışında Uygulamanızdan, yalnızca RemoteView tarafından desteklenen düzenleri ve Görünümleri kullanabilirsiniz.

Mizanpajınızı oluştururken, aşağıdakilerle kısıtlandınız:

  • Analog saat
  • Buton
  • Kronometre
  • FrameLayout
  • GridLayout
  • ımagebutton
  • Resim görünümü
  • LinearLayout
  • İlerleme çubuğu
  • RelativeLayout
  • Metin görünümü
  • ViewStub
  • AdapterViewFlipper
  • GridView
  • Liste görünümü
  • StackView
  • ViewFlipper

Yukarıdaki sınıfların ve Görünümlerin alt sınıflarının değil destekledi.

List_widget.xml adlı yeni bir düzen kaynak dosyası oluşturun. Verilerimizi bir ListView kullanarak göstereceğimizden, bu düzen çoğunlukla öğe:

Koleksiyon widget'ını doldurma

Daha sonra, ListView için bir veri sağlayıcı oluşturmamız gerekiyor. DataProvider.java adlı yeni bir Java sınıfı oluşturun ve aşağıdakileri ekleyin:

android.content.Context dosyasını içe aktarın; android.content.Intent alma; android.widget.RemoteViews içeri aktar; android.widget.RemoteViewsService dosyasını içe aktarın; java.util.ArrayList öğesini içe aktarın; java.util.List'i içe aktarın; statik android.R.id.text1'i içe aktarın; statik android.R.layout.simple_list_item_1 dosyasını içe aktarın; genel sınıf DataProvider RemoteViewsService.RemoteViewsFactory {List'i uygular myListView = new ArrayList <> (); İçerik mContext = null; public DataProvider (İçerik içeriği, Amaç amacı) {mContext = içerik; } @Override public void onCreate () {initData (); } @Override public void onDataSetChanged () {initData (); } @Override public void onDestroy () {} @Override public int getCount () {return myListView.size (); } @Override public RemoteViews getViewAt (int konumu) {RemoteViews görünümü = yeni RemoteViews (mContext.getPackageName (), simple_list_item_1); view.setTextViewText (text1, myListView.get (position)); dönüş görünümü; } @Override public RemoteViews getLoadingView () {return null; } @Override public int getViewTypeCount () {return 1; } @Override public long getItemId (int position) {dönüş konumu; } @Override public boolean hasStableIds () {return true; } private void initData () {myListView.clear (); (int i = 1; i <= 15; i ++) {myListView.add ("ListView maddesi" + i); }}}

AppWidgetProvider: Widget'ınızı yapılandırma

Bir Android widget'ı oluşturmak için birkaç dosya oluşturmanız gerekir.

Widget'a özgü ilk dosyamız, Widget'ınız ilk oluşturulduğunda çağrılan yöntem ve bu widget'in silindiğinde çağrılan yöntem gibi çeşitli widget yaşam döngüsü yöntemlerini tanımlayacağınız bir BroadcastReceiver olan bir AppWidgetProvider'dir.

CollectionWidget adlı yeni bir Java sınıfı (Dosya> Yeni> Java Sınıfı) oluşturun.

Başlamak için, tüm widget sağlayıcı dosyalarının AppWidgetProvider sınıfından genişletilmesi gerekir. Daha sonra list_widget.xml düzen kaynak dosyasını bir RemoteViews nesnesine yüklememiz ve AppWidgetManager'ı güncellenmiş RemoteViews nesnesi hakkında bilgilendirmemiz gerekir:

genel sınıf CollectionWidget AppWidgetProvider {statik geçersiz güncellemeAppWidget (Bağlam bağlamı, AppWidgetManager appWidgetManager, int appWidgetId) {İçeriğini genişletir {// RemoteViews nesnesini tanıtın // RemoteViews views = new RemoteViews; setRemoteAdapter (bağlam, görünümler); // AppWidgetManager'ın uygulama widget'ını güncellemesini isteyin // appWidgetManager.updateAppWidget (appWidgetId, views); }

Bağdaştırıcı oluştur

Verilerimizi bir ListView'da görüntülediğimizden, AppWidgetProvider'da bir setRemoteAdapter () yöntemi tanımlamamız gerekir. SetRemoteAdapter (), AbsListView.setRemoteViewsAdapter () öğesini çağırmaya eşdeğerdir, ancak uygulama widget'larında kullanılmak üzere tasarlanmıştır.

Bu yöntemde AdapterView'ın (R.id.widget_list) kimliğini ve sonunda RemoteViewsAdapter'imize veri sağlayacak olan hizmetin amacını tanımlamamız gerekir - bu WidgetService sınıfını kısaca oluşturacağız.

özel statik boşluk setRemoteAdapter (İçerik bağlamı, @NonNull final RemoteViews görünümleri) {views.setRemoteAdapter (R.id.widget_list, new Intent (bağlam, WidgetService.class)); }}

Widget yaşam döngüsü yöntemlerini tanımlama

AppWidgetProvider'de, aşağıdaki widget yaşam döngüsü yöntemlerini de tanımlamamız gerekir:

OnUpdate ile yeni içerik alma

OnUpdate () widget yaşam döngüsü yöntemi, widget'ınızın Görünümlerini yeni bilgilerle güncellemekten sorumludur.

Bu yöntem her zaman denir:

  • Kullanıcı, onUpdate () yöntemini manuel olarak tetikleyen bir eylem gerçekleştirir.
  • Uygulamanın belirli güncelleme aralığı geçti.
  • Kullanıcı bu widget'ın yeni bir örneğini ana ekranına yerleştirir.
  • Bir ACTION_APPWIDGET_RESTORED yayın amacı, AppWidgetProvider'a gönderilir. Bu yayın amacı, pencere aracı yedeklemeden geri yüklenirse tetiklenir.

Ayrıca, widget'ınızın kullanması gereken herhangi bir olay işleyicisini de kaydedeceğiniz yerdir.

Bir Android widget’ını güncellerken, kullanıcıların aynı widget’ın birden fazla örneğini oluşturabildiğini hatırlamak önemlidir. Örneğin, belki de widget'ınız özelleştirilebilir ve kullanıcı farklı bilgiler gösteren veya benzersiz işlevlere erişim sağlayan birkaç “sürüm” oluşturmaya karar verir.

OnUpdate () işlevini çağırdığınızda, bu widget'in her bir örneğini mi yoksa yalnızca belirli bir örneği mi güncelleyeceğinizi belirtmeniz gerekir. Her örneği güncellemek istiyorsanız, cihazdaki her örneği tanımlayan bir dizi kimlik olan appWidgetIds uygulamasını kullanabilirsiniz.

Aşağıdaki kod parçasında, her örneği güncelliyorum:

@Oturride public void onUpdate (İçerik bağlamı, AppWidgetManager appWidgetManager, int appWidgetIds) {için (int ("appWidgetId: appWidgetIds)") // // bu widget'ın tüm örneklerini güncelleyin } super.onUpdate (bağlam, appWidgetManager, appWidgetIds); }

Kodu basit tutmaya yardımcı olmak için bu onUpdate () yönteminin şu anda widget'ta herhangi bir değişiklik yapmadığını unutmayın.

onEnabled: İlk kurulumun yapılması

OnEnabled () yaşam döngüsü yöntemi, ACTION_APPWIDGET_ENABLED'e yanıt olarak çağrılır; bu, widget'ınızın bir örneği ana ekranına eklendiğinde gönderilen ilk saati. Kullanıcı widget'ınızın iki örneğini oluşturuyorsa, ilk örnek için onEnabled () çağrılır, ancak değil Ikinci için.

OnEnabled () yaşam döngüsü yöntemi, widget bilgilerinizi besleyen veritabanını oluşturmak gibi, widget'ınızın tüm örnekleri için gereken herhangi bir ayarı yapmanız gerektiği yerdir.

Bir tost göstereceğim, bu yüzden bu yaşam döngüsü yönteminin ne zaman çağrıldığını tam olarak görebilirsiniz:

@ Genel geçersizliği onEnabled'de (Bağlam bağlamı) {Toast.makeText (bağlam, "onEnabled denilen", Toast.LENGTH_LONG) .show (); }

Kullanıcı, widget'ınızın tüm örneklerini siler ve ardından yeni bir örnek oluşturursa, bunun ilk örnek olarak sınıflandırıldığını ve onEnabled () yaşam döngüsü yönteminin bir kez daha çağrılacağını unutmayın.

OnDisabled ile temizlik

OnDisabled () yöntemi, kullanıcı sildiğinde tetiklenen ACTION_APPWIDGET_DISABLED'e yanıt olarak çağrılır. son widget'ınızın örneği.

Bu widget yaşam döngüsü yöntemi, onEnabled () yönteminde oluşturduğunuz tüm kaynakları temizlemeniz gereken yerdir, örneğin onEnabled () uygulamasında oluşturduğunuz veritabanını siler.

Kodumuzu basit tutmaya yardımcı olmak için, bu yöntem her tetiklendiğinde bir tost göstereceğim:

@ Genel geçersizliği geçersiz kıldı onDisabled (İçerik bağlamı) {Toast.makeText (bağlam, "onDisabled denir", Toast.LENGTH_LONG) .show (); }

Tamamlanan AppWidgetProvider

CollectionWidget dosyanız şimdi şöyle görünmelidir:

android.appwidget.AppWidgetManager öğesini içe aktarın; android.appwidget.AppWidgetProvider dosyasını içe aktarın; android.content.Context dosyasını içe aktarın; androidx.annotation.NonNull dosyasını içe aktarın; android.content.Intent alma; android.widget.RemoteViews içeri aktar; android.widget.Toast dosyasını içe aktarın; // AppWidgetProvider sınıfından genişletme // public class CollectionWidget, AppWidgetProvider'ı genişletir {statik void updateAppWidget (İçerik bağlamı, AppWidgetManager appWidgetManager, int appWidgetId) {// Mizanpaj kaynak dosyasını bir RemoteView nesnesine yükleyin getPackageName (), R.layout.list_widget); setRemoteAdapter (bağlam, görünümler); // AppWidgetManager'ı RemoteView nesnesi hakkında bilgilendirin // appWidgetManager.updateAppWidget (appWidgetId, views); } @Override public void onUpdate (İçerik bağlamı, AppWidgetManager appWidgetManager, int appWidgetIds) {için (int (int appWidgetId: appWidgetIds)) {updateAppWidget (bağlam, appWidgetManager, appWidgetId); } super.onUpdate (bağlam, appWidgetManager, appWidgetIds); } @Override public void onEnabled (İçerik bağlamı) {Toast.makeText (içerik, "onEnabled denilen", Toast.LENGTH_LONG) .show (); } @Override public void onDisabled (İçerik bağlamı) {Toast.makeText (içerik, "onDisabled denir", Toast.LENGTH_LONG) .show (); } private static void setRemoteAdapter (İçerik bağlamı, @NonNull final RemoteViews görünümü) {views.setRemoteAdapter (R.id.widget_list, new Intent (bağlam, WidgetService.class)); }}

AppWidgetProviderInfo dosyası

Uygulama widget'ınız, widget'ınızın minimum boyutları ve ne sıklıkta güncellenmesi gerektiği gibi bazı önemli özellikleri tanımlayan bir AppWidgetProviderInfo dosyası gerektirir.

AppWidgetProviderInfo dosyası, projenizin res / xml klasöründe saklanır.

Projeniz zaten bu klasörü içermiyorsa, oluşturmanız gerekir:

  • Projenizin res klasörünü Control tuşunu basılı tutarak tıklayın.
  • Yeni> Android Kaynak Dizini'ni seçin.
  • Sonraki pencerede, Kaynak tipi açılır penceresini açın ve xml seçeneğini seçin.
  • Dizin adı otomatik olarak xml olarak güncellenmelidir, ancak değilse, el ile değiştirmeniz gerekecektir.
  • Tamam'a tıklayın.

Ardından, AppWidgetProviderInfo'muz olarak kullanacağımız bir collection_widget_info dosyası oluşturun:

  • Projenizin xml klasörünü Control tuşunu basılı tutarak tıklayın.
  • Yeni> XML kaynak dosyası'nı seçin.
  • Bu dosyaya ad verin collection_widget_info.
  • Tamam'a tıklayın.

AppWidgetProviderInfo dosyamızda aşağıdaki özellikleri tanımlamamız gerekir:

1. android: önizlemeImage

Bu, uygulama widget'ınızı cihazın Pencere Öğesi Seçici'de temsil eden bir çizimdir.

ÖnizlemeImage sağlamazsanız, Android bunun yerine uygulamanızın simgesini kullanır. Kullanıcıları Widget Seçici'den widget'ınızı seçmeye teşvik etmek için, widget'ınızı, kullanıcının ana ekranında uygun şekilde yapılandırıldığında bir kez nasıl görüneceğini gösteren bir çekmece sağlamalısınız.

Önizleme görüntüsü oluşturmanın en kolay yolu, Android öykünücüsüne dahil olan Widget Önizleme uygulamasını kullanmaktır. Bu uygulama, widget'ınızı yapılandırmanıza ve ardından Android projenizde kullanabileceğiniz bir resim oluşturmanıza olanak sağlar.

Widget'ımızı oluşturmayı bitirdikten sonra bu resmi oluşturacağız, bu yüzden şimdilik otomatik olarak oluşturulan mipmap / ic_launcher kaynağını geçici bir önizleme görüntüsü olarak kullanacağım.

2. android: widgetCategory

Uygulama widget'ları, genellikle Android ana ekranına sahip olan ancak Evie Launcher veya Nova Launcher gibi bir üçüncü taraf başlatıcısı olabilir.

API 17 ve 20 seviyeleri arasında ana ekrana uygulama widget'ları koymak mümkündü veya Kilit ekranı, ancak kilit ekranı desteği API seviyesi 21'de kullanımdan kaldırılmıştır.

Android: widgetCategory özniteliğini kullanarak uygulama widget'ınızın ana ekrana, kilit ekranına (Android'in "tuş kilidi" olarak adlandırdığı) veya her ikisine de yerleştirilip yerleştirilemeyeceğini belirleyebilirsiniz. Android'in en son sürümlerinde ekrana widget yerleştirmek mümkün olmadığından, yalnızca ana ekranı hedefliyor olacağız.

Kullanıcının gizliliğini korumak için, widget'ınız kilit ekranına yerleştirildiğinde hassas veya özel bilgileri göstermemelidir.

Kullanıcılara widget'ınızı kilit ekranına yerleştirme seçeneği verirseniz, kullanıcının cihazına bakan herkes widget'ınızı ve tüm içeriğini potansiyel olarak görebilir. Kullanıcının gizliliğini korumaya yardımcı olmak için, widget'ınız kilit ekranına yerleştirildiğinde hassas veya özel bilgileri göstermemelidir. Widget'ınız kişisel veriler içeriyorsa, ayrı ana ekran ve kilit ekranı düzenleri sağlamayı düşünebilirsiniz.

3. android: initialLayout

Bu, widget'ınızın ana ekrana yerleştirildiğinde kullanması gereken, yerleşim projemiz için list_widget.xml olan düzen kaynak dosyasıdır.

4. android: resizeMode = ”yatay | dikey”

Android: resizeMode niteliği, widget'ınızın yatay mı dikey mi yoksa her iki eksen boyunca yeniden boyutlandırılıp boyutlandırılmayacağını belirlemenizi sağlar.

Widget'ınızın çeşitli ekranlarda düzgün görüntülenmesini ve işlevlerini yerine getirmesini sağlamak için, widget'ınızın yatay olarak yeniden boyutlandırılmasına izin vermeniz önerilir. ve dikey olarak, belirli bir nedeniniz olmadığı sürece.

5. android: minHeight ve android: minWidth

Widget'ınız yeniden boyutlandırılabilirse, kullanıcının widget'ınızı kullanılamaz hale geldiği noktaya kadar daraltmadığından emin olmanız gerekir. Uygulamanız, kullanıcı tarafından yeniden boyutlandırıldığında küçültülebilecek en kük olanı tanımlamak için minHeight ve minWidth özelliklerini kullanabilirsiniz.

Bu değerler aynı zamanda widget'ınızın başlangıç ​​boyutunu da gösterir, bu nedenle widget'ınız yeniden boyutlandırılamazsa minHeight ve minWidth, widget'ın kalıcı boyutlandırmasını tanımlar.

6. android: güncellemePeriodMillis

AppWidgetProviderInfo ayrıca, widget'ınızın ne sıklıkta yeni bilgi talep edeceğini de belirteceğiniz yerdir.

Desteklenen en küçük güncelleme aralığı her 1800000 milisaniyede bir (30 dakika) birdir. Daha kısa bir güncelleme aralığı bildirseniz bile, widget'ınız her yarım saatte bir güncellenir.

Sistemdeki en son bilgileri olabildiğince çabuk görüntülemek isteyebilirsiniz. irade Yeni bilgi almak için uyku cihazını uyandırın. Sık sık yapılan güncellemeler bir cihazın bataryası yoluyla, özellikle cihazın gece gibi uzun bir süre boşta kaldığı dönemlerde yanabilir. Mümkün olan en iyi kullanıcı deneyimini sağlamak, pil tüketimini sınırlandırmak arasında denge kurmak ve makul bir zaman diliminde yeni bilgiler sağlamak anlamına gelir.

Widget'ınızın göstereceği içerik türünü de dikkate almalısınız.

Ayrıca, Android için widget'larınızın göstereceği içerik türünü de dikkate almalısınız. Örneğin, bir hava durumu widget'ının yalnızca günde bir kez güncellenmiş bir tahmin alması gerekebilir, oysa son dakika haberi görüntüleyen bir uygulamanın daha sık güncellenmesi gerekebilir.

Bu mükemmel dengeyi bulmak için, widget'ınızı çeşitli güncelleme sıklıkları arasında test etmeniz ve pil ömrü üzerindeki etkileri ve widget'ınızın içeriğinin zamanlılığını ölçmeniz gerekebilir. İstekli bir test grubunuz varsa, bazı güncelleme frekanslarının diğerlerinden daha olumlu alınıp alınmadığını görmek için A / B testi bile yapabilirsiniz.

Aalso oku: AndroidManifest.xml bilmeniz gereken her şey

Son olarak, mükemmel güncelleme aralığını tanımladığınızda, uygulamanızı geliştirirken ve test ederken daha kısa bir aralık kullanmak isteyebilirsiniz. Örneğin, uygulamanızın onUpdate () yönteminin doğru şekilde tetiklendiğini test ederken, mümkün olan en kısa güncelleme frekansını (android: updatePeriodMillis = ”1800000 use) kullanabilirsiniz ve ardından uygulamanızı genel olarak serbest bırakmadan önce bu değeri değiştirin.

Tamamlanan AppWidgetProviderInfo

Bitmiş collection_widget_info.xml dosyası şunun gibi görünmelidir:

Kullanıcının ana ekranını karıştırmayın!

Ana ekranın hiçbir zaman karmaşık görünmediğinden emin olmak için widget'ımıza biraz dolgu ve kenar boşluğu ekleyeceğiz. Projeniz zaten bir dimens.xml dosyası içermiyorsa, bir tane oluşturmanız gerekir:

  • Projenizin değerler klasörünü Control tuşunu basılı tutarak tıklayın.
  • Yeni> Değerler kaynak dosyası'nı seçin.
  • Bu dosyaya adın kısıldığını verin.
  • Tamam'a tıklayın.

Dimens.xml dosyanızı açın ve aşağıdaki kenar boşluğu ve dolgu değerlerini tanımlayın:

10dp 8dp

Widget'a veri gönderme

Ardından, toplama verilerimizi widget’e göndermekten sorumlu olacak bir widget hizmeti oluşturmamız gerekiyor.

WidgetService adlı yeni bir Java sınıfı (Yeni> Java Sınıfı) oluşturun ve aşağıdakileri ekleyin:

android.content.Intent alma; android.widget.RemoteViewsService dosyasını içe aktarın; public class WidgetService, RemoteViewsService'i genişletti {@Override public RemoteViewsFactory onGetViewFactory (Amaç amacı) {return new DataProvider (this, niyet); }}

Widget'ınızı Manifest'e kaydetme

Şimdi projemizin Manifestosunda bazı değişiklikler yapmamız gerekiyor.

Başlamak için, Manifest'i açın ve widget'ınızı BroadcastReceiver olarak kaydedin. Ayrıca android.appwidget.action.APPWIDGET_UPDATE işlemi için bir niyet filtresi eklememiz gerekir:

Ardından, uygulama widget sağlayıcısını belirtmeniz gerekir:

Son olarak, bu durumda WidgetService sınıfı olan widget'ımıza veri gönderecek hizmeti bildirmemiz gerekir. Bu hizmet android.permission.BIND_REMOTEVIEWS iznini gerektirir:

Widget'ınızı teste alın

Bu öğreticiyi takip ediyorsanız, şimdi kullanıcının ana ekranında bir veri kümesi görüntüleyen eksiksiz bir koleksiyon widget'ınız olur.

Bu gerçek hayattaki bir Android projesiyse, genellikle yaşam döngüsü yöntemlerini, özellikle onUpdate () yöntemini genişletirsiniz, ancak Android cihazınıza yükleyip test edebileceğiniz bir widget oluşturmak için gereken tek şey budur:

  • Bu projeyi uyumlu bir Android akıllı telefona, tablete veya AVD'ye (Android Sanal Cihaz) yükleyin.
  • Ana ekranın herhangi bir boş bölümüne uzun basın ve istendiğinde Pencere öğesini seçin; bu, Widget Seçici'yi başlatır.
  • Yeni oluşturduğunuz uygulama widget'ını bulana kadar Widget Seçici boyunca kaydırın.
  • Ana ekranınıza eklemek için bu widget'a uzun basın.
  • Bu, bu widget'ın ilk örneği olduğundan, onEnabled () yöntemi çalışmalı ve “onEnabled” tostu göreceksiniz.
  • Widget'ınızı yeniden boyutlandırın. Desteklenen bir minimum boyut belirlerseniz, widget'ı bu değerin üstüne çekemeyeceğinizi kontrol edin.
  • ListView'in beklendiği gibi kaydırıldığını sınayın.
  • Ardından, widget'ınızı silerek onDisabled () yöntemini kontrol etmelisiniz. Widget'a uzun basın ve ardından Giriş ekranından Kaldır'ı seçin. Bu, bu widget'ın son örneği olduğundan, onDisabled () yöntemi çalışmalı ve “onDisabled” tostu göreceksiniz.

İşlevsel bir Android uygulama widget'ı sunmak için gereken tek şey budur, ancak sık sık kullanıcı deneyimini iyileştirebilecek birkaç ek vardır. Aşağıdaki bölümlerde, widget'ı en iyi şekilde gösteren bir önizleme görüntüsü oluşturarak kullanıcıları Widget Seçici'den bu widget'ı seçmeleri için teşvik edeceğiz. Projenize bir konfigürasyon Aktivitesi ekleyerek size nasıl tamamen özelleştirilebilir bir widget yaratılacağını da göstereceğim.

Bir Android widget önizleme görüntüsü oluşturma

Android cihazınızı tutup Widget Seçici’yi kaydırırsanız, her widget’ın bir kullanıcı tarafından temsil edildiğini göreceksiniz; bu, genellikle bu widget’ın, kullanıcının ana ekranında yapılandırıldığında nasıl görüneceğini gösterir.

Kullanıcıları widget'inizi seçmeye teşvik etmek için, widget'inizin sunduğu tüm faydalı bilgileri ve özellikleri vurgulayan bir önizleme görüntüsü sağlamalısınız.

Android öykünücüsüne dahil olan Widget Önizleme uygulamasını kullanarak hızlı ve kolay bir önizleme görüntüsü oluşturabilirsiniz.

Widget Önizlemenin en son Android sistem görüntülerine dahil edilmediğini unutmayın, bu nedenle Nougat (API Level 25) veya daha önceki bir sürümü kullanarak bir AVD oluşturmanız gerekir:

  • Uygulamanızı API 25 veya daha düşük çalışan bir AVD'ye yükleyin.
  • AVD’nin uygulama çekmecesini açın ve Widget Önizleme uygulamasını başlatın.
  • Pencere Öğesi Önizlemesi, şu anda bu AVD’de yüklü olan her uygulamanın bir listesini görüntüler; Uygulamanızı listeden seçin.

  • Widget'ınız şimdi boş bir arka planda görüntülenecek. Widget'ınızın sunabileceği en iyisini gösterene kadar, widget'ınızı yeniden boyutlandırarak ve ince ayarlayarak biraz zaman harcayın.
  • Widget'ınızın görünümünden ve içeriğinden memnun olduğunuzda, Anlık Görüntüyü Al'ı seçin.

  • Anlık görüntünüzü geri almak için Android Studio'ya geri dönün ve araç çubuğundan Görünüm> Araç Pencereleri> Aygıt Dosyası Gezgini'ni seçin. Bu, Android Studio’nun Aygıt Dosyası Gezgini’ni başlatır.
  • Aygıt Dosyası Gezgini'nde, sdcard / İndir seçeneğine gidin. Önizleme resminizi aşağıdaki biçimde kaydetmiş olmalısınız: _ori_.png

  • Bu görüntüyü Android Studio'dan dışarı sürükleyin ve Masaüstünüz gibi kolayca erişilebilecek bir yere bırakın.
  • Bu görüntü dosyasına açıklayıcı bir ad verin.
  • Dosyayı projenizin çizilebilir klasörüne sürükleyip bırakın.
  • Bu proje için collection_widget_info.xml olan AppWidgetProviderInfo ürününüzü açın.
  • Android'i bulun: PreviewImage = ”@ mipmap / ic_launcher” satırı ve önizleme resminize referans vermek için güncelleyin.

Widget'ınız şimdi bu yeni resim kaynağını önizleme resmi olarak kullanacak:

  • Güncellenmiş projeyi fiziksel Android cihazınıza veya AVD'nize yükleyin.
  • Ana ekranın herhangi bir boş bölümüne uzun basın.
  • Widget Seçici'yi başlatan Widget'lara dokunun.
  • Widget'ınıza gidin; şimdi güncellenmiş önizleme görüntüsünü kullanıyor olmalıdır.

Özelleştirilebilir widget'lar: Bir yapılandırma Etkinliği ekleme

Kullanıcı, widget'ınızın her bir örneğini ana ekranına yerleştirdiğinde bir yapılandırma Etkinliği otomatik olarak başlar.

Projenize bir yapılandırma Aktivitesi eklemek isteyebileceğiniz birkaç neden var.

widget'lar, bireysel kullanıcılar için en önemli olan bilgilere veya özelliklere erişim sağlarken en iyi kullanıcı deneyimini sağlama eğilimindedir.

İlk olarak, bazı widget'lar ilk kurulum gerektirir; örneğin, trafik uyarılarını gösteren bir widget’ın, kullanıcının ev adresini, nerede çalıştıklarını ve tipik olarak gidip geldikleri saatleri bilmesi gerekebilir. Bu bilgileri girmenin bir yolu olmadan, widget'ınız tamamen yararsız olabilir!

Ek olarak, widget'ler, bireysel kullanıcılar için en önemli olan bilgilere veya özelliklere erişim sağlarken en iyi kullanıcı deneyimini sağlama eğilimindedir. Projenize bir konfigürasyon Aktivitesi ekleyerek, kullanıcılara seçme ve seçme özgürlüğü verebilirsiniz kesinlikle widget'ınıza neler dahildir?

Bir pencere aracının arka planını veya yazı tipini değiştirme gibi nispeten basit özelleştirmeler bile kullanıcı deneyimi üzerinde olumlu bir etki yaratabilir - sonuçta, hiç kimse ana ekranın geri kalanıyla görsel olarak çakışan bir widget'ı takdir edemez!

Hiç kimse, ana ekranının geri kalanıyla görsel olarak çakışan bir widget'ı beğenmeyecek!

Alternatif olarak, bazen widget'ınıza eklemek istediğiniz uzun bir içerik listesine sahip olabilirsiniz ve seçeneklerinizi daraltmak için mücadele edersiniz. Yapılandırma Etkinliği, tüm fikirlerinizi iyi kullanmadan kullanmanın bir yolu olabilir. oluşturma karmaşık, kafa karıştırıcı bir widget. Bir pencere aracı ayarlamanın bir angarya gibi hissetmemesi gerektiğini unutmayın, bu nedenle bir yapılandırma Etkinliği sağlarsanız, kendinizi üç yapılandırma seçeneğiyle sınırlamanız önerilir.

Projemize bir yapılandırma etkinliği ekleyelim!

Öncelikle, bizim konfigürasyon aktivitemizin bir paftaya ihtiyacı var, dolayısıyla config_activity.xml adlı yeni bir pafta kaynak dosyası oluşturun.

Bu düzende aşağıdaki düğmeleri ekleyeceğim:

  • Bir yapılandırma düğmesi. Gerçek hayattaki bir projede, bu düğme widget'ı bir şekilde değiştirir, örneğin içerik ekleme veya silme veya widget'ın güncelleme sıklığını değiştirme. Kodumuzu basit tutmaya yardımcı olmak için, bu düğmeye tıklamak sadece bir Yapılandırma Seçenekleri tostu gösterecektir.
  • Bir ayar düğmesi. Kullanıcı, widget'larının nasıl yapılandırıldığından memnun olduktan sonra, bu düğmeye basıldığında yeni yapılandırılmış widget'ı ana ekranına yerleştirir.

İşte tamamlanmış config_activity.xml dosyam:

Yapılandırma Aktivitesini Yaratın

Şimdi konfigürasyon etkinliğimizi yaratmamız gerekiyor.

Başlamak için, ConfigActivity adında yeni bir Java sınıfı oluşturun. Bu Aktivitede, Konfigürasyon Aktivitesini başlatan niyetten Uygulama Widget Kimliğini alacağız. Bu niyetin bir widget kimliği yoksa, finish () yöntemini çağırmamız gerekir:

Amaç niyet = getIntent (); Paket ekstraları = intent.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish (); }

Daha sonra, bir dönüş amacı oluşturmamız, orijinal appWidgetId'yi geçmemiz ve sonuçları konfigürasyon Aktivitesinden ayarlamamız gerekir:

Amaç sonucuValue = new Amaç (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); bitiş(); }}}

Bir yapılandırma etkinliği verirseniz, yapılandırma etkinliği başlatıldığında ACTION_APPWIDGET_UPDATE yayını otomatik olarak gönderilmez, yani onUpdate () yöntemi alışkanlık kullanıcı widget'ınızın bir örneğini oluştururken çağrılabilir.

Widget'ınızın güncel bilgiler ve içerikle oluşturulduğundan emin olmak için zorunluluk ilk onUpdate () isteğini tetikleyin.

Yapılandırma tamamlandı:

android.app.Activity içeri aktar; android.appwidget.AppWidgetManager öğesini içe aktarın; android.os.Bundle alma; android.widget.Button öğesini içe aktarın; android.content.Intent alma; android.view.View içeri aktar; android.view.View.OnClickListener öğelerini içe aktarın; android.widget.Toast dosyasını içe aktarın; genel sınıf ConfigActivity, Activity {@Override korumalı void onCreate (BundI savedInstanceState) {super.onCreate (savedInstanceState); öğesini genişletir; setContentView (R.layout.config_activity); setResult (RESULT_CANCELED); Button setupWidget = (Button) findViewById (R.id.setupWidget); setupWidget.setOnClickListener (new OnClickListener () {@Oirride genel boşluğu onClick (Görünüm v) {handleSetupWidget ();}}); Button configButton = (Button) findViewById (R.id.configButton); configButton.setOnClickListener (new OnClickListener () {@Oirride genel boşluğu onClick (Görünüm v) {handleConfigWidget ();}}); } özel void handleSetupWidget () {showAppWidget (); } private void handleConfigWidget () {Toast.makeText (ConfigActivity.this, "Yapılandırma seçenekleri", Toast.LENGTH_LONG) .show (); } int appWidgetId; özel geçersiz showAppWidget () {appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; Amaç niyet = getIntent (); Paket ekstraları = intent.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish (); } // TO TO: Yapılandırmayı gerçekleştirin // Intent resultValue = new Intent (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); bitiş(); }}}

Bir konfigürasyon Aktivitesi oluşturduktan sonra, bu Aktiviteyi Manifest'te bildirmeniz ve APPWIDGET_CONFIGURE işlemini kabul ettiğini belirtmeniz gerekir:

Son olarak, bir konfigürasyon Aktivitesine paket kapsamı dışında referans verildiğinden, bu Aktiviteyi AppWidgetProviderInfo içinde bildirmemiz gerekir, ki bu durumda collection_widget_info.xml dosyası:

android: yapılandırmak = "com.jessicathornsby.collectionwidget.ConfigActivity">

Projenizi test etmek

Artık bitmiş projenizi test etme zamanı geldi:

  • Güncellenen projenizi fiziksel bir Android cihaza veya AVD'ye yükleyin.
  • En son sürümle çalıştığınızdan emin olmak için widget'ınızın önceki tüm örneklerini silin.
  • Ana ekranın herhangi bir boş alanına uzun basın ve istendiğinde Widget'ları seçin.
  • Widget Seçici'de widget'ınızı bulun ve seçmek için uzun basın.
  • Widget'ı ana ekranınıza bırakın. Yapılandırma Etkinliği otomatik olarak başlatılmalıdır.
  • Bazı Yapılandırma Gerçekleştir düğmesine bir tıklama verin ve bu etkileşimin başarıyla kaydedildiğini onaylayan bir Yapılandırma Seçenekleri tostu görünmelidir.
  • Widget’ın ayarlarını değiştirdiğinizi ve şimdi ana ekranınıza yerleştirmeye hazır olduğunuzu hayal edin; Widget Oluştur düğmesine bir dokunuş verin ve bu widget başarıyla oluşturulmalıdır.

Tamamlanan koleksiyon widget projesini GitHub'dan indirebilirsiniz.

Sarma

Bu yazıda, kullanıcının ana ekranındaki bir veri kümesini görüntüleyen kaydırılabilir bir koleksiyon widget'ı oluşturduk.

Bu projeyle çalışmaya devam etmek istiyorsanız, AppWidgetProviderInfo dosyanızda (collection_widget_info) tanımlanan aralıkta yeni bilgilerle güncellenen bir widget oluşturmak için onUpdate () yöntemine kendi kodunuzu eklemeyi deneyebilirsiniz.

Bir Android widget oluşturursanız, yarattıklarınızı aşağıdaki yorumlarda paylaştığınızdan emin olun!

Prime Day'ten bir hafta uzaktayız ve Amazon zaten eçili ürünlerde kuponların yüzde 20'ini teklif ediyor. Kamera modunu Android veya iO akıllı telefonunuzdaki Amazon uygulam...

Evleri akıllı evlere çevirme eğilimi on birkaç yılda yavaş olmuştur, ancak gittikçe daha fazla ev ahibi, termotatlar, kameralar, ışıklar, obalar ve daha fazlaı gibi bağlı cihazları odal...

Daha Fazla Detay