Buat Widget Android untuk Apl anda

Pengarang: Lewis Jackson
Tarikh Penciptaan: 13 Mungkin 2021
Tarikh Kemas Kini: 1 Julai 2024
Anonim
Dicoding Developer Coaching #21: Android | Cara Membuat Widget di Aplikasi Androidmu
Video.: Dicoding Developer Coaching #21: Android | Cara Membuat Widget di Aplikasi Androidmu

Kandungan


Sejak hari-hari awal OS, widget untuk Android telah membolehkan pengguna untuk melibatkan diri dengan aplikasi kegemaran mereka, dari keselesaan skrin utama mereka. Jadi bagaimana anda membuat widget Android?

Bagi pemaju, widget memberikan aplikasi anda kehadiran yang berharga di skrin utama pengguna. Daripada tidak kelihatan di laci apl, pengguna akan diingatkan tentang aplikasi anda setiap masa mereka melirik skrin utama mereka - sementara juga mendapat pratonton kandungan paling menarik dan berguna aplikasi anda.

Widget memberikan aplikasi anda kehadiran berharga di skrin utama pengguna

Dalam artikel ini, saya akan menunjukkan kepada anda bagaimana untuk memberikan pengalaman pengguna yang lebih baik sambil menggalakkan pengguna terlibat dengan aplikasi anda, dengan membuat widget Android! Menjelang akhir artikel ini, anda akan mencipta widget koleksi bergulir yang memaparkan set data lengkap pada skrin utama pengguna.

Untuk memastikan anda menyampaikan jenis widget yang pengguna mahu untuk ditempatkan di skrin utama mereka, kami juga akan mewujudkan Aktiviti tatarajah, yang akan membolehkan pengguna menyesuaikan kandungan, rupa dan ciri widget. Akhirnya, saya akan menunjukkan bagaimana anda boleh menggalakkan pengguna menggunakan widget anda dengan membuat imej Pratonton Widget yang mempamerkan yang terbaik yang ditawarkan oleh widget anda.


Juga baca: Membangunkan untuk peranti boleh dilipat: Apa yang anda perlu ketahui

Apakah widget untuk Android?

Widget aplikasi adalah aplikasi ringan dan ringan yang hidup di skrin utama pengguna.

Widget untuk Android boleh menyediakan pelbagai kandungan, tetapi biasanya jatuh ke dalam salah satu kategori berikut:

  • Widget maklumat. Ini adalah widget yang tidak boleh ditatal yang memaparkan beberapa maklumat, seperti ramalan cuaca hari ini atau tarikh dan masa.
  • Widget pengumpulan. Ini adalah widget bergulir yang memaparkan satu set data berkaitan, diformat sebagai ListView, GridView, StackView, atau AdapterViewFlipper. Widget pengumpulan biasanya disokong oleh sumber data, seperti pangkalan data atau Array.
  • Kawal widget. Widget ini bertindak sebagai kawalan jauh yang membolehkan pengguna berinteraksi dengan aplikasi anda, tanpa perlu membawanya ke latar depan. Apl yang memainkan media, seperti podcast atau muzik, sering mempunyai widget kawalan yang membenarkan pengguna memicu tindakan Main, Jeda, dan Langkau terus dari skrin utama mereka.
  • Widget hibrid. Kadangkala anda mungkin dapat memberikan pengalaman pengguna yang lebih baik dengan menggabungkan elemen dari beberapa kategori. Sebagai contoh, jika anda mengembangkan widget kawalan untuk aplikasi muzik maka anda boleh menyediakan kawalan Main, Jeda dan Langkau, tetapi anda juga boleh memutuskan untuk memaparkan beberapa maklumat, seperti tajuk dan artis lagu. Jika anda membuat keputusan untuk mencampur dan mencocokkan, maka jangan terbawa-bawa! Widget cenderung untuk memberikan pengalaman pengguna yang terbaik apabila mereka menyediakan akses mudah kepada sedikit maklumat yang tepat pada masanya, atau beberapa ciri yang biasa digunakan. Untuk membantu memastikan widget hibrid anda ringan, disarankan agar anda mengenal pasti kategori utama widget anda, mengembangkannya mengikut kategori itu, dan kemudian tambah beberapa elemen dari kategori menengah widget.

Adakah projek saya benar-benar memerlukan widget aplikasi?

Terdapat beberapa sebab mengapa anda harus mempertimbangkan menambahkan widget aplikasi untuk projek Android anda.


Widget untuk Android boleh meningkatkan pengalaman pengguna

Sebagai peraturan umum, langkah pelayaran yang lebih sedikit diperlukan untuk menyelesaikan tugas, lebih baik pengalaman pengguna.

Dengan menyediakan widget aplikasi, anda boleh mengalih keluar beberapa langkah pelayaran dari aliran yang paling biasa digunakan oleh aplikasi anda. Dalam senario kes terbaik, pengguna anda akan dapat mendapatkan maklumat yang mereka perlukan hanya dengan melirik di skrin utama mereka atau melakukan tugas yang dikehendaki hanya dengan mengetik butang dalam widget kawalan anda.

Lebih kuat daripada pintasan aplikasi

Widget aplikasi sering memberi respons kepada acara onClick dengan melancarkan tahap teratas dalam aplikasi yang berkaitan, sama dengan pintasan aplikasi. Walau bagaimanapun, widget juga boleh menyediakan akses langsung kepada Aktiviti tertentu dalam aplikasi, contohnya mengetik pemberitahuan Baru yang Diterima widget mungkin melancarkan aplikasi yang berkaitan dengan yang baru sudah terbuka.

Dengan membenamkan pelbagai pautan dalam susun atur widget anda, anda boleh memberikan akses satu ketik ke semua Aktiviti paling penting apl anda, mengeluarkan lebih banyak langkah pelayaran dari aliran yang paling biasa digunakan.

Dengan membenamkan pelbagai pautan dalam susun atur widget anda, anda boleh memberikan akses satu ketik ke semua Aktiviti paling penting apl anda.

Perhatikan bahawa widget bertindak balas kepada peristiwa onClick sahaja, yang menghalang pengguna dari tidak sengaja berinteraksi dengan widget anda semasa mereka meluncur di sekitar skrin utama. Satu-satunya pengecualian ialah apabila pengguna cuba memadamkan widget anda dengan menyeretnya ke arah tindakan Keluarkan skrin utama mereka, seperti dalam senario ini widget anda akan bertindak balas kepada isyarat leretan menegak.

Interaksi ini diuruskan oleh sistem Android, jadi anda tidak perlu bimbang tentang secara manual melaksanakan sokongan sapuan tegak dalam widget anda.

Buat widget Android untuk memacu penglibatan jangka panjang

Mentakrifkan orang untuk memuat turun aplikasi anda hanyalah langkah pertama untuk mewujudkan aplikasi Android yang berjaya. Kemungkinannya, jika anda mengambil telefon pintar Android atau tablet Android anda sendiri dan leret melalui laci aplikasi, maka anda akan menemui berbilang aplikasi yang anda tidak digunakan dalam beberapa hari, minggu atau berpotensi walaupun bulan!

Baca juga:Bermula dengan Facebook untuk Android SDK

Sebaik sahaja apl anda berjaya dipasang pada peranti pengguna, anda perlu bekerja keras untuk memastikan mereka terlibat dan menikmati aplikasi anda. Memberi aplikasi anda kehadiran di skrin utama boleh menjadi alat yang berkuasa untuk membantu memacu penglibatan jangka panjang, semata-mata kerana ia merupakan peringatan yang tetap bahawa permohonan anda ada!

Widget yang direka dengan baik juga boleh berfungsi sebagai iklan yang berterusan untuk aplikasi anda. Setiap kali pengguna melayari skrin utama mereka, widget anda mempunyai peluang untuk menggalakkan mereka untuk melibatkan diri semula dengan aplikasi anda dengan menyampaikannya dengan semua kandungan yang paling menarik dan berguna aplikasinya.

Mewujudkan widget aplikasi koleksi

Dalam tutorial ini, kami akan membina koleksi koleksi yang memaparkan array sebagai ListView ditatal.

Untuk membantu anda menjejaki kitaran hayat widget aplikasi, widget ini juga akan mencetuskan pelbagai toasts ketika ia bergerak melalui keadaan kitar hayat yang berlainan. Menjelang akhir tutorial ini, kami akan meningkatkan widget kami dengan imej pratonton adat yang akan dipaparkan dalam Android Widget Picker, dan Aktiviti tatarajah, yang akan membolehkan pengguna untuk menyesuaikan widget sebelum meletakkannya di skrin utama mereka.

Buat projek Android baharu dengan tetapan pilihan anda, dan mari bermula!

Membina susun atur widget anda

Untuk memulakan, mari tentukan antara muka pengguna widget (UI).

Widget aplikasi dipaparkan dalam proses di luar aplikasi anda, jadi anda hanya boleh menggunakan susun atur dan Pandangan yang disokong oleh RemoteViews.

Apabila membina susun atur anda, anda terhad kepada yang berikut:

  • AnalogClock
  • Butang
  • Chronometer
  • FrameLayout
  • GridLayout
  • ImageButton
  • ImageView
  • LinearLayout
  • Bar kemajuan
  • RelativeLayout
  • TextView
  • ViewStub
  • AdapterViewFlipper
  • Paparan grid
  • Senarai semak
  • StackView
  • ViewFlipper

Ambil perhatian bahawa subkelas kelas dan Pandangan di atas adalah tidak disokong.

Buat fail sumber susun atur baru bernama list_widget.xml. Oleh kerana kami akan memaparkan data kami menggunakan ListView, susun atur ini berfungsi sebagai wadah untuk elemen:

Dengarkan koleksi koleksi

Seterusnya, kami perlu mencipta pembekal data untuk ListView kami. Buat kelas Java baru bernama DataProvider.java dan tambahkan yang berikut:

import android.content.Context; import android.content.Intent; import android.widget.RemoteViews; import android.widget.RemoteViewsService; import java.util.ArrayList; import java.util.List; import static android.R.id.text1; import static android.R.layout.simple_list_item_1; DataProvider kelas awam melaksanakan RemoteViewsService.RemoteViewsFactory {Senarai myListView = new ArrayList <> (); Konteks mContext = null; DataProvider awam (konteks Konteks, Niat niat) {mContext = context; } @Override public void onCreate () {initData (); } @Override public void onDataSetChanged () {initData (); } @Override public void onDestroy () {} @Override public int getCount () {return myListView.size (); } @Override RemoteViews public getViewAt (int int) {RemoteViews view = RemoteViews baru (mContext.getPackageName (), simple_list_item_1); view.setTextViewText (text1, myListView.get (position)); pandangan kembali; } @Override RemoteViews public getLoadingView () {return null; } @Override int public getViewTypeCount () {return 1; } @Override public long getItemId (int position) {return position; } @Orrride public boolean hasStableIds () {return true; } private void initData () {myListView.clear (); untuk (int i = 1; i <= 15; i ++) {myListView.add ("Senarai ListView" + i); }}}

AppWidgetProvider: Mengkonfigurasi widget anda

Untuk membuat widget Android, anda perlu membuat beberapa fail.

Fail khusus khusus kami ialah AppWidgetProvider, yang merupakan BroadcastReceiver di mana anda akan menentukan pelbagai kaedah kitaran hayat widget, seperti kaedah yang dipanggil apabila widget anda mula-mula diwujudkan dan kaedah yang dipanggil apabila widget itu akhirnya dihapuskan.

Buat kelas Java baru (File> New> Java Class) bernama CollectionWidget.

Untuk memulakan, semua fail pembekal widget mesti dilanjutkan dari kelas AppWidgetProvider. Kami kemudian perlu memuatkan fail sumber susun atur list_widget.xml ke objek RemoteViews, dan memaklumkan kepada AppWidgetManager mengenai objek RemoteViews yang telah dikemas kini:

CollectionWidget kelas awam memanjangkan AppWidgetProvider {update void statikAppWidget (konteks Konteks, AppWidgetManager appWidgetManager, int appWidgetId) {// Instantiate object RemoteViews // views RemoteView = RemoteViews baru (context.getPackageName (), R.layout.list_widget); setRemoteAdapter (konteks, pandangan); / / Permintaan bahawa AppWidgetManager mengemas kini widget aplikasi // appWidgetManager.updateAppWidget (appWidgetId, views); }

Buat penyesuai

Oleh kerana kami memaparkan data kami dalam ListView, kami perlu menentukan kaedah setRemoteAdapter () dalam AppWidgetProvider kami. SetRemoteAdapter () adalah bersamaan dengan memanggil AbsListView.setRemoteViewsAdapter () tetapi direka untuk digunakan dalam widget aplikasi.

Dalam kaedah ini, kita perlu menentukan id dari AdapterView (R.id.widget_list) dan niat perkhidmatan yang akhirnya akan memberikan data kepada RemoteViewsAdapter kami - kami akan membuat kelas WidgetService ini dalam masa yang singkat.

set taksiran statik peribadiRemoteAdapter (Konteks konteks, @NonNull final RemoteViews views) {views.setRemoteAdapter (R.id.widget_list, niat baru (konteks, WidgetService.class)); }}

Menetapkan kaedah kitaran hayat widget

Dalam AppWidgetProvider kami, kami juga perlu menentukan cara kitaran hayat widget berikut:

Mendapatkan kandungan baharu dengan onUpdate

Kaedah kitaran hidup widget onUpdate () bertanggungjawab untuk mengemas kini Views widget anda dengan maklumat baru.

Kaedah ini dipanggil setiap masa:

  • Pengguna melakukan tindakan yang secara manual mencetuskan kaedah onUpdate ().
  • Selang kemas kini yang ditentukan aplikasi telah berlalu.
  • Pengguna meletakkan contoh baharu widget ini pada skrin utama mereka.
  • Sasaran siaran ACTION_APPWIDGET_RESTORED dihantar ke AppWidgetProvider. Niat penyiaran ini dicetuskan jika widget itu pernah dipulihkan dari sandaran.

Ini juga di mana anda akan mendaftar mana-mana pengendali acara yang harus digunakan oleh widget anda.

Apabila mengemas kini widget Android, penting untuk diingati bahawa pengguna boleh membuat beberapa contoh widget yang sama. Sebagai contoh, mungkin widget anda dapat disesuaikan dan pengguna memutuskan untuk membuat beberapa "versi" yang memaparkan maklumat yang berbeza, atau memberikan akses kepada fungsi unik.

Apabila anda memanggil onUpdate (), anda perlu menentukan sama ada anda mengemaskini setiap contoh widget ini, atau hanya contoh khusus. Jika anda ingin mengemas kini setiap contoh, maka anda boleh menggunakan appWidgetIds, yang merupakan pelbagai ID yang mengenal pasti setiap contoh di seluruh peranti.

Dalam coretan berikut, saya mengemas kini setiap contoh:

@Override public void onUpdate (Konteks konteks, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId: appWidgetIds) {// Kemas kini semua widget ini // updateAppWidget (konteks, appWidgetManager, appWidgetId); } super.onUpdate (konteks, appWidgetManager, appWidgetIds); }

Perhatikan bahawa untuk membantu mengekalkan kod itu terus, kaedah onUpdate () ini tidak membuat sebarang perubahan pada widget.

onEnabled: Melaksanakan persediaan awal

Kaedah kitaran hidup onEnabled () dipanggil sebagai tindak balas kepada ACTION_APPWIDGET_ENABLED, yang dihantar apabila contoh widget anda ditambahkan pada skrin utama untuk pertama masa. Jika pengguna membuat dua contoh widget anda, maka onEnabled () akan dipanggil untuk contoh pertama, tetapi tidak untuk yang kedua.

Kaedah kitaran hidup onEnabled () adalah di mana anda perlu melakukan apa-apa persediaan yang diperlukan untuk semua contoh widget anda, seperti mewujudkan pangkalan data yang akan memberi maklumat widget anda.

Saya akan memaparkan roti bakar, jadi anda dapat melihat dengan tepat apabila kaedah kitar hayat ini dipanggil:

@Override public void onEnabled (Konteks Konteks) {Toast.makeText (konteks, "onEnabled dipanggil", Toast.LENGTH_LONG) .show (); }

Ambil perhatian bahawa jika pengguna memadam semua contoh widget anda dan kemudian membuat contoh baru, maka ini dikelaskan sebagai contoh pertama, dan kaedah hidup kitaran onEnabled () akan dipanggil sekali lagi.

Membersihkan, dengan onDisabled

Kaedah onDisabled () dipanggil sebagai tindak balas kepada ACTION_APPWIDGET_DISABLED, yang dicetuskan apabila pengguna memadam lepas contoh widget anda.

Kaedah kitaran hayat widget ini adalah di mana anda perlu membersihkan sebarang sumber yang anda buat dalam kaedah onEnabled (), contohnya memadamkan pangkalan data yang anda buat dalam onEnabled ().

Untuk membantu mengekalkan kod kami dengan mudah, saya hanya akan memaparkan roti panggang setiap kali kaedah ini dicetuskan:

@Override public void onDisabled (Konteks konteks) {Toast.makeText (konteks, "onDisabled dipanggil", Toast.LENGTH_LONG) .show (); }

AppWidgetProvider yang lengkap

Fail CollectionWidget anda kini seharusnya kelihatan seperti ini:

import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import androidx.annotation.NonNull; import android.content.Intent; import android.widget.RemoteViews; import android.widget.Toast; / Extend dari kelas AppWidgetProvider / public class CollectionWidget memperluaskan AppWidgetProvider {update void statikAppWidget (Context konteks, AppWidgetManager appWidgetManager, int appWidgetId) {// Muatkan fail sumber susun atur ke objek RemoteViews // pandangan RemoteViews = RemoteViews baru (konteks. getPackageName (), R.layout.list_widget); setRemoteAdapter (konteks, pandangan); // Inform AppWidgetManager mengenai objek RemoteViews // appWidgetManager.updateAppWidget (appWidgetId, views); } @Override public void onUpdate (Context context, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId: appWidgetIds) {updateAppWidget (context, appWidgetManager, appWidgetId); } super.onUpdate (konteks, appWidgetManager, appWidgetIds); } @Override public void onEnabled (Konteks konteks) {Toast.makeText (konteks, "onEnabled dipanggil", Toast.LENGTH_LONG) .show (); } @Override public void onDisabled (Konteks konteks) {Toast.makeText (konteks, "onDisabled dipanggil", Toast.LENGTH_LONG) .show (); } private static void setRemoteAdapter (context konteks, @NonNull final RemoteViews dilihat) {views.setRemoteAdapter (R.id.widget_list, niat baru (konteks, WidgetService.class)); }}

Fail AppWidgetProviderInfo

Widget aplikasi anda juga memerlukan fail AppWidgetProviderInfo, yang mentakrifkan beberapa ciri penting, termasuk dimensi minimum widget anda dan seberapa kerap ia perlu dikemas kini.

Fail AppWidgetProviderInfo disimpan dalam folder res / xml projek anda.

Jika projek anda belum mengandungi folder ini, maka anda perlu menciptanya:

  • Kawalan-klik folder res projek anda.
  • Pilih Baharu> Direktori Sumber Android.
  • Dalam tetingkap berikutnya, buka tetingkap jenis Sumber, dan pilih xml.
  • Nama direktori harus dikemas kini ke xml secara automatik, tetapi jika tidak maka anda perlu menukarnya secara manual.
  • Klik OK.

Seterusnya, buat fail collection_widget_info, yang akan kami gunakan sebagai AppWidgetProviderInfo kami:

  • Control-click folder xml projek anda.
  • Pilih Baru> Fail sumber XML.
  • Namakan fail ini collection_widget_info.
  • Klik OK.

Dalam fail AppWidgetProviderInfo kami, kami perlu menentukan sifat berikut:

1. android: previewImage

Ini adalah drawable yang mewakili widget aplikasi anda di Widget Picker peranti.

Jika anda tidak menyediakan previewImage, maka Android akan menggunakan ikon aplikasi anda. Untuk menggalakkan pengguna memilih widget anda dari Widget Picker, anda harus memberikan gambaran yang dapat menunjukkan rupa widget anda apabila ia dikonfigurasi dengan betul pada skrin utama pengguna.

Cara termudah untuk membuat imej pratonton, ialah menggunakan aplikasi Pratonton Widget yang termasuk dalam emulator Android. Aplikasi ini membolehkan anda mengkonfigurasi widget anda dan kemudian menghasilkan imej, yang kemudian anda boleh gunakan dalam projek Android anda.

Kami akan membuat imej ini sebaik sahaja kami selesai membina widget kami, jadi untuk sekarang saya akan menggunakan sumber mipmap / ic_launcher yang dihasilkan secara automatik sebagai imej pratonton sementara.

2. android: widgetCategory

Widget aplikasi mesti diletakkan di dalam App Widget Host, yang biasanya skrin utama skrin Android, tetapi juga boleh menjadi pelancar pihak ketiga seperti Evie Launcher atau Nova Launcher.

Antara API tahap 17 dan 20, adalah mungkin untuk meletakkan widget aplikasi di skrin utama atau skrin kunci, tetapi sokongan lockscreen telah usang di tahap API 21.

Anda boleh menentukan sama ada widget aplikasi anda boleh diletakkan di skrin utama, skrin kunci (yang Android merujuk sebagai "kawal kekunci") atau kedua-duanya, menggunakan android: widgetCategory attribute. Memandangkan tidak mungkin untuk meletakkan widget di skrin kunci dalam versi Android yang paling terkini, kami akan menyasarkan skrin utama sahaja.

Untuk memelihara privasi pengguna, widget anda tidak boleh memaparkan maklumat sensitif atau peribadi apabila ia diletakkan pada kunci skrin.

Sekiranya anda memberikan pengguna pilihan untuk meletakkan widget anda pada skrin kunci, sesiapa sahaja yang melirik peranti pengguna berpotensi melihat widget anda, dan semua kandungannya. Untuk membantu memelihara privasi pengguna, widget anda tidak boleh memaparkan maklumat sensitif atau peribadi apabila ia diletakkan di skrin kunci. Jika widget anda mengandungi data peribadi, maka anda mungkin ingin mempertimbangkan untuk menyediakan susun atur skrin utama dan skrin kunci yang berasingan.

3. android: initialLayout

Ini adalah fail sumber tata letak yang widget anda harus digunakan apabila ia diletakkan di skrin utama, yang bagi projek kami adalah list_widget.xml.

4. android: resizeMode = "mendatar | menegak"

Android: resizeMode attribute membolehkan anda menentukan sama ada widget anda boleh diubah saiznya secara mendatar, menegak, atau bersama kedua paksi.

Untuk memastikan widget anda memaparkan dan berfungsi dengan betul merentasi pelbagai skrin, disarankan agar anda membenarkan widget anda diubah saiznya secara mendatar dan secara menegak, melainkan anda mempunyai sebab tertentu tidak.

5. android: minHeight dan android: minWidth

Sekiranya widget anda boleh disalurkan semula, maka anda perlu memastikan pengguna tidak mengecilkan widget anda ke titik di mana ia menjadi tidak dapat digunakan. Anda boleh menggunakan minHeight dan atribut minWidth untuk menentukan aplikasi terkecil anda akan menyusut apabila saiznya diubah oleh pengguna.

Nilai ini juga mewakili saiz permulaan widget anda, jadi jika widget anda tidak boleh disunting maka minHeight dan minWidth akan menentukan saiz tetap widget.

6. android: updatePeriodMillis

AppWidgetProviderInfo juga di mana anda akan menentukan berapa kerap widget anda harus meminta maklumat baru.

Selang kemas kini yang terkecil yang disokong sekali setiap 1800000 milisaat (30 minit). Walaupun anda mengumumkan selang masa kemas kini yang lebih pendek, widget anda masih akan dikemas kini sekali setiap setengah jam.

Walaupun anda mungkin mahu memaparkan maklumat terkini secepat mungkin, sistem itu akan bangun peranti tidur untuk mendapatkan maklumat baru. Kemas kini kerap boleh dibakar melalui bateri peranti, terutamanya semasa tempoh di mana peranti dibiarkan terbiar untuk tempoh masa yang penting, seperti dalam sekelip mata. Menyediakan pengalaman pengguna yang terbaik bermakna menimbulkan keseimbangan antara mengehadkan penggunaan bateri, dan menyediakan maklumat baru dalam tempoh masa yang munasabah.

Anda juga perlu mengambil kira jenis kandungan widget anda akan dipaparkan.

Anda juga perlu mengambil kira jenis kandungan widget anda untuk Android akan dipaparkan. Sebagai contoh, widget cuaca mungkin hanya perlu mendapatkan ramalan dikemas kini sekali sehari, sedangkan aplikasi yang memaparkan berita pecah akan perlu dikemas kini dengan lebih kerap.

Untuk mencari keseimbangan sempurna ini, anda mungkin perlu menguji widget anda merentasi pelbagai frekuensi kemaskini dan mengukur kesan pada hayat bateri, dan ketepatan masa kandungan widget anda. Jika anda mempunyai kumpulan penguji yang sanggup, maka anda juga boleh membuat persediaan ujian A / B, untuk melihat sama ada beberapa kekerapan pembaharuan diterima lebih positif daripada yang lain.

Aalso baca: AndroidManifest.xml semua yang anda perlu ketahui

Akhirnya, sebaik sahaja anda mengenal pasti selang kemas kini yang sempurna, anda mungkin mahu menggunakan jarak yang lebih pendek apabila membangun dan menguji apl anda. Sebagai contoh, anda boleh menggunakan kekerapan kemas kini yang paling singkat (android: updatePeriodMillis = "1800000") apabila anda menguji bahawa kaedah onUpdate () aplikasi anda mencetuskan dengan betul, dan kemudian mengubah nilai ini sebelum melepaskan apl anda kepada orang awam.

AppWidgetProviderInfo yang lengkap

Fail collection_widget_info.xml yang telah selesai sepatutnya kelihatan seperti ini:

Jangan kekacang skrin pengguna pengguna!

Untuk memastikan skrin utama tidak kelihatan berantakan, kami akan menambah beberapa padding dan margin pada widget kami. Jika projek anda belum mengandungi fail dimens.xml, maka anda perlu membuat satu:

  • Kawalan-klik folder nilai projek anda.
  • Pilih New> Nilai sumber fail.
  • Berikan fail ini nama dimens.
  • Klik OK.

Buka fail dimens.xml anda dan tentukan nilai margin dan padding berikut:

10dp 8dp

Menghantar data ke widget

Seterusnya, kami perlu membuat perkhidmatan widget, yang akan bertanggungjawab untuk menghantar data pengumpulan kami ke widget.

Buat kelas Java baru (Kelas Baru> Java) bernama WidgetService, dan tambahkan yang berikut:

import android.content.Intent; import android.widget.RemoteViewsService; kelas awam WidgetService memperluaskan RemoteViewsService {@Override RemoteViewsFactory public onGetViewFactory (Niat niat) {kembali DataProvider baru (niat ini, niat); }}

Mendaftar widget anda di Manifest

Sekarang kita perlu membuat beberapa perubahan pada Manifest projek kami.

Untuk memulakan, buka Manifes dan daftarkan widget anda sebagai BroadcastReceiver. Kami juga perlu menambah penapis niat untuk tindakan android.appwidget.action.APPWIDGET_UPDATE:

Seterusnya, anda perlu menentukan pembekal widget aplikasi:

Akhirnya, kita perlu mengisytiharkan perkhidmatan yang akan menghantar data ke widget kami, yang dalam contoh ini adalah kelas WidgetService. Perkhidmatan ini memerlukan kebenaran android.permission.BIND_REMOTEVIEWS:

Letakkan widget anda ke ujian

Sekiranya anda telah mengikuti tutorial ini, maka anda akan mempunyai widget pengumpulan lengkap yang memaparkan satu set data pada skrin utama pengguna.

Jika ini adalah projek Android hidup sebenar, maka anda biasanya akan mengembangkan kaedah kitar hayat, terutamanya kaedah onUpdate (), tetapi ini adalah semua yang kami perlukan untuk membuat widget yang anda boleh pasang dan menguji pada peranti Android anda:

  • Pasang projek ini pada telefon pintar Android, tablet atau AVD (Peranti Maya Maya) yang serasi.
  • Tekan lama sebarang bahagian kosong pada skrin utama, dan pilih Widget apabila diminta; ini melancarkan Picker Widget.
  • Leret melalui Widget Picker sehingga anda mencari widget aplikasi yang baru saja anda buat.
  • Long-tekan widget ini untuk menambahkannya ke skrin utama anda.
  • Oleh kerana ini adalah contoh pertama widget tertentu, kaedah onEnabled () harus dijalankan, dan anda akan melihat "onEnabled dipanggil" roti bakar.
  • Ubah saiz widget anda. Jika anda menetapkan saiz yang disokong minimum, pastikan bahawa anda tidak boleh mengecilkan widget melewati nilai ini.
  • Uji skrol ListView, seperti yang diharapkan.
  • Seterusnya, anda perlu menyemak kaedah onDisabled (), dengan memadamkan widget anda. Tekan lama widget, kemudian pilih Buang dari skrin Laman Utama. Oleh kerana ini adalah contoh terakhir widget ini, kaedah onDisabled () harus dijalankan, dan anda akan melihat "onDisabled yang dipanggil" roti bakar.

Ini semua yang anda perlukan untuk menyampaikan widget aplikasi Android yang berfungsi, tetapi terdapat beberapa penambahan yang sering dapat meningkatkan pengalaman pengguna. Dalam bahagian yang berikut, kami akan menggalakkan pengguna memilih widget ini dari Widget Picker, dengan membuat imej pratonton yang mempamerkan widget yang terbaik. Saya juga akan menunjukkan kepada anda bagaimana untuk membuat widget sepenuhnya disesuaikan, dengan menambah konfigurasi Aktiviti ke projek anda.

Mewujudkan imej pratonton widget Android

Jika anda mengambil peranti Android anda dan leret melalui Widget Picker, anda akan melihat bahawa setiap widget diwakili oleh imej, yang biasanya menunjukkan bagaimana widget ini akan kelihatan setelah ia dikonfigurasi pada skrin utama pengguna.

Untuk menggalakkan pengguna memilih widget anda, anda harus memberikan imej pratonton yang menyoroti semua maklumat dan ciri berguna yang akan ditawarkan oleh widget anda.

Anda boleh membuat imej pratonton dengan cepat dan mudah dengan menggunakan aplikasi Pratonton Widget yang termasuk dalam emulator Android.

Ambil perhatian bahawa Pratonton Widget tidak termasuk dalam imej sistem Android terkini, jadi anda perlu membuat AVD menggunakan Nougat (API Level 25) atau lebih awal:

  • Pasang aplikasi anda pada AVD yang menjalankan API 25 atau lebih rendah.
  • Buka laci apl AVD dan lancarkan aplikasi Pratonton Widget.
  • Pratonton Widget akan memaparkan senarai setiap aplikasi yang sedang dipasang pada AVD ini; pilih aplikasi anda dari senarai.

  • Widget anda sekarang akan dipaparkan pada latar belakang kosong. Luangkan masa untuk mengubah saiz dan tweak widget anda sehingga ia menunjukkan yang terbaik yang ditawarkan oleh widget anda.
  • Sebaik sahaja anda gembira dengan rupa dan kandungan widget anda, pilih Ambil Snapshot.

  • Untuk mengambil gambar anda, alihkan semula ke Android Studio dan pilih Lihat> Alat Windows> Peranti Fail Peranti dari bar alat. Ini melancarkan Peranti Fail Peranti Android Studio.
  • Dalam Peranti Fail Peranti, navigasi ke sdcard / Muat turun. Anda harus mencari imej pratonton anda disimpan dalam format berikut: _ori_.png

  • Seret imej ini dari Android Studio dan jatuhkannya di tempat yang mudah diakses, seperti Desktop anda.
  • Berikan fail imej ini nama deskriptif.
  • Seret dan lepaskan fail ke dalam folder yang boleh ditarik projek anda.
  • Buka AppWidgetProviderInfo anda, yang bagi projek ini adalah collection_widget_info.xml.
  • Cari android: previewImage = "@ mipmap / ic_launcher" baris dan kemas kini untuk rujukan imej pratonton anda.

Widget anda sekarang akan menggunakan sumber imej baharu ini sebagai imej pratontonnya:

  • Pasang projek dikemas kini pada peranti Android fizikal anda atau AVD.
  • Tekan lama mana-mana bahagian kosong pada skrin utama.
  • Ketik Widget, yang melancarkan Pemilih Widget.
  • Tatal ke widget anda; kini kini perlu menggunakan imej pratonton yang dikemas kini.

Widget disesuaikan: Menambah Aktiviti tatarajah

Aktiviti tatarajah dilancarkan secara automatik apabila pengguna meletakkan setiap contoh widget anda pada skrin utama mereka.

Terdapat beberapa sebab mengapa anda mungkin mahu menambah Aktiviti konfigurasi ke projek anda.

widget cenderung memberikan pengalaman pengguna yang terbaik apabila mereka memberikan akses kepada maklumat atau ciri yang paling penting kepada pengguna individu.

Pertama, sesetengah widget memerlukan persediaan awal, misalnya widget yang memaparkan peringatan trafik mungkin perlu mengetahui alamat rumah pengguna, tempat mereka bekerja, dan masa-masa ketika mereka biasanya berulang. Tanpa cara untuk memasukkan maklumat ini, widget anda mungkin tidak berguna!

Di samping itu, widget cenderung memberikan pengalaman pengguna yang terbaik apabila mereka memberikan akses kepada maklumat atau ciri yang paling penting kepada pengguna individu. Dengan menambah konfigurasi Aktiviti ke projek anda, anda boleh memberi pengguna kebebasan untuk memilih dan memilih betul-betul apa yang termasuk dalam widget anda.

Walaupun penyesuaian yang agak lurus, seperti menukar latar belakang widget atau fon, boleh memberi kesan positif kepada pengalaman pengguna - selepas semua, tiada siapa yang akan menghargai widget yang secara visual bertempur dengan skrin utama mereka!

Tidak seorang pun akan menghargai widget yang bertempar secara visual dengan skrin utama mereka yang lain!

Sebagai alternatif, kadangkala anda mungkin mempunyai senarai panjang kandungan yang anda ingin sertakan dalam widget anda, dan anda sedang berusaha untuk menyempitkan pilihan anda. Aktiviti tatarajah boleh menjadi satu cara untuk meletakkan semua idea anda untuk digunakan dengan baik, tanpa mencipta widget berantakan dan mengelirukan. Perlu diingat bahawa menetapkan widget tidak seharusnya merasa seperti tugas, jadi jika anda menyediakan Aktiviti tatarajah maka disarankan agar anda membataskan diri kepada tiga pilihan konfigurasi.

Mari tambahkan Aktiviti konfigurasi ke projek kami!

Pertama, konfigurasi Aktiviti kami memerlukan susun atur, jadi buat fail sumber tata letak baru bernama config_activity.xml.

Saya akan menambah butang berikut pada susun atur ini:

  • Butang tatarajah. Dalam projek kehidupan sebenar, butang ini akan mengubah suai widget dalam beberapa cara, contohnya menambah atau mengeluarkan kandungan, atau mengubah kerap kali kemas kini widget. Untuk membantu mengekalkan kod kami dengan mudah, klik butang ini hanya akan memaparkan toast Pilihan Konfigurasi.
  • Butang persediaan. Sebaik sahaja pengguna gembira dengan bagaimana widget mereka dikonfigurasi, menekan butang ini akan meletakkan widget yang baru dikonfigurasikan pada skrin utama mereka.

Berikut ialah fail config_activity.xml saya yang lengkap:

Buat Aktiviti Konfigurasi

Sekarang, kita perlu membuat Aktiviti konfigurasi kami.

Untuk memulakan, buat kelas Java baru bernama ConfigActivity. Dalam Aktiviti ini, kami akan mengambil ID Widget Apl dari niat yang melancarkan Aktiviti tatarajah. Jika niat ini tidak mempunyai ID widget, maka kami perlu memanggil kaedah finish ():

Niat niat = getIntent (); Tambahan Bundle = intent.getExtras (); jika (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); jika (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {selesai (); }

Seterusnya, kita perlu mencipta niat kembali, lulus appWidgetId yang asal dan tetapkan hasil dari konfigurasi Aktiviti:

Hasil NiatValue = Niat baru (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); selesai (); }}}

Jika anda menyediakan Aktiviti tatarajah, siaran ACTION_APPWIDGET_UPDATE tidak akan dihantar secara automatik apabila Konfigurasi Aktiviti dilancarkan, yang bermakna kaedah onUpdate () tidak akan dipanggil apabila pengguna membuat contoh widget anda.

Untuk memastikan widget anda dibuat dengan maklumat dan kandungan yang terkini, Aktiviti konfigurasi anda mestilah mencetuskan permintaan onUpdate () yang pertama.

Inilah ConfigActivity yang lengkap:

import android.app.Activity; import android.appwidget.AppWidgetManager; import android.os.Bundle; import android.widget.Button; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; ConfigActivity kelas awam meluaskan Aktiviti {@Override dilindungi tidak sah onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.config_activity); setResult (RESULT_CANCELED); Setup ButtonWidget = (Button) findViewById (R.id.setupWidget); setupWidget.setOnClickListener (new OnClickListener () {@Override public void onClick (View v) {handleSetupWidget ();}}); Butang configButton = (Button) findViewById (R.id.configButton); configButton.setOnClickListener (new OnClickListener () {@Override public void onClick (View v) {handleConfigWidget ();}}); } private handleSetupWidget () {showAppWidget (); } private void handleConfigWidget () {Toast.makeText (ConfigActivity.this, "Options Configuration", Toast.LENGTH_LONG) .show (); } int appWidgetId; void private showAppWidget () {appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; Niat niat = getIntent (); Tambahan Bundle = intent.getExtras (); jika (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); jika (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {selesai (); } // TO DO: Lakukan konfigurasi // Intent resultValue = Intent baru (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); selesai (); }}}

Sebaik sahaja anda telah membuat Aktiviti tatarajah, anda perlu mengisytiharkan Aktiviti ini dalam Manifes dan menyatakan bahawa ia menerima tindakan APPWIDGET_CONFIGURE:

Akhir sekali, sejak Aktiviti tatarajah dirujuk di luar skop pakej, kita perlu mengisytiharkan Aktiviti ini di AppWidgetProviderInfo kami, yang dalam contoh ini ialah fail collection_widget_info.xml:

android: configure = "com.jessicathornsby.collectionwidget.ConfigActivity">

Menguji projek anda

Kini sudah tiba masanya untuk meletakkan projek anda selesai untuk ujian:

  • Pasang projek anda yang dikemas kini pada peranti Android fizikal atau AVD.
  • Padamkan semua contoh terdahulu widget anda, untuk memastikan anda bekerja dengan versi yang paling terkini.
  • Long tekan mana-mana kawasan kosong skrin utama dan pilih Widget apabila diminta.
  • Cari widget anda dalam Pemilihan Widget dan tekan lama untuk memilihnya.
  • Jatuhkan widget ke skrin utama anda. Aktiviti Konfigurasi harus dilancarkan secara automatik.
  • Beri butang Lakukan Beberapa Tatarajah satu klik, dan Pilihan roti Konfigurasi hendaklah muncul, mengesahkan bahawa interaksi ini telah berjaya didaftarkan.
  • Bayangkan anda telah mengagak tetapan widget dan kini bersedia untuk meletakkannya di skrin utama anda; berikan butang Buat Widget itu satu paip, dan widget ini harus dicipta dengan jayanya.

Anda boleh memuat turun projek widget pengumpulan yang lengkap dari GitHub.

Mengakhiri

Dalam artikel ini, kami membuat widget pengumpulan yang boleh ditatal yang memaparkan set data pada skrin utama pengguna.

Jika anda ingin terus bekerja dengan projek ini, anda boleh cuba menambah kod anda sendiri pada kaedah onUpdate (), untuk membuat widget yang mengemas kini dengan maklumat baru pada jarak yang ditetapkan dalam fail AppWidgetProviderInfo anda (collection_widget_info).

Jika anda membuat widget Android, maka pastikan untuk berkongsi ciptaan anda dalam ulasan di bawah!

Walaupun Wi-Fi percuma dan ambungan rangkaian wayarle yang baik melimpah pada hari ini, maih terdapat banyak maa di mana anda mungkin mendapati diri anda tanpa ambungan internet pada telefon pintar an...

Amazon boleh melepakan peaing AirPod eawal eparuh kedua tahun ini.Amazon bekerja pada peaing AirPod dengan kualiti audio yang kononnya lebih baik dan integrai Alexa, menurutBloomberg. Tidak eperti Bea...

Jawatan Yang Menarik