Buat Widget Android untuk Aplikasi Anda

Pengarang: Lewis Jackson
Tanggal Pembuatan: 13 Boleh 2021
Tanggal Pembaruan: 1 Juli 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

Isi


Sejak awal OS, widget untuk Android memungkinkan pengguna untuk terlibat dengan aplikasi favorit mereka, dari kenyamanan homescreen mereka. Jadi bagaimana Anda membuat widget Android?

Untuk pengembang, widget memberi aplikasi Anda kehadiran yang berharga di layar beranda pengguna. Alih-alih terselip di laci aplikasi, pengguna akan diingatkan tentang aplikasi Anda setiap saat mereka melirik homescreen mereka - sambil juga melihat pratinjau konten aplikasi Anda yang paling menarik dan bermanfaat.

Widget memberi aplikasi Anda kehadiran yang berharga di layar beranda pengguna

Di artikel ini, saya akan menunjukkan kepada Anda bagaimana memberikan pengalaman pengguna yang lebih baik sambil mendorong pengguna untuk terlibat dengan aplikasi Anda, dengan membuat widget Android! Pada akhir artikel ini, Anda akan membuat widget koleksi yang dapat digulir yang menampilkan kumpulan data lengkap pada layar beranda pengguna.

Untuk memastikan Anda memberikan jenis widget yang digunakan pengguna ingin untuk ditempatkan di layar beranda mereka, kami juga akan membuat Aktivitas konfigurasi, yang akan memungkinkan pengguna untuk menyesuaikan konten, tampilan, dan fitur widget. Terakhir, saya akan menunjukkan bagaimana Anda dapat mendorong orang untuk menggunakan widget Anda, dengan membuat gambar Pratinjau Widget yang menampilkan yang terbaik yang ditawarkan widget Anda.


Baca juga: Berkembang untuk perangkat yang dapat dilipat: Apa yang perlu Anda ketahui

Apa itu widget untuk Android?

Widget aplikasi adalah aplikasi mini yang ringan dan hidup di layar beranda pengguna.

Widget untuk Android dapat menyediakan berbagai konten, tetapi umumnya termasuk dalam salah satu kategori berikut:

  • Widget informasi. Ini adalah widget yang tidak dapat digulir yang menampilkan beberapa informasi, seperti ramalan cuaca hari ini atau tanggal dan waktu.
  • Widget koleksi. Ini adalah widget yang dapat digulir yang menampilkan sekumpulan data terkait, diformat sebagai ListView, GridView, StackView, atau AdapterViewFlipper. Widget koleksi biasanya didukung oleh sumber data, seperti database atau Array.
  • Kontrol widget. Widget ini bertindak sebagai remote control yang memungkinkan pengguna untuk berinteraksi dengan aplikasi Anda, tanpa harus membawanya ke latar depan. Aplikasi yang memutar media, seperti podcast atau musik, sering memiliki widget kontrol yang memungkinkan pengguna untuk memicu tindakan Play, Pause, dan Skip langsung dari layar beranda mereka.
  • Widget hybrid. Terkadang Anda mungkin dapat memberikan pengalaman pengguna yang lebih baik dengan menggabungkan elemen dari berbagai kategori. Misalnya, jika Anda mengembangkan widget kontrol untuk aplikasi musik maka Anda dapat memberikan kontrol Putar, Jeda, dan Lewati, tetapi Anda juga dapat memutuskan untuk menampilkan beberapa informasi, seperti judul dan artis lagu. Jika Anda memutuskan untuk mencampur dan mencocokkan, maka jangan terbawa suasana! Widget cenderung memberikan pengalaman pengguna terbaik ketika mereka menyediakan akses mudah ke sejumlah kecil informasi relevan yang tepat waktu atau beberapa fitur yang biasa digunakan. Untuk membantu menjaga widget hybrid Anda tetap ringan, Anda disarankan untuk mengidentifikasi kategori utama widget Anda, mengembangkannya sesuai dengan kategori itu, dan kemudian tambahkan beberapa elemen dari kategori sekunder widget.

Apakah proyek saya benar-benar membutuhkan widget aplikasi?

Ada beberapa alasan mengapa Anda harus mempertimbangkan untuk menambahkan widget aplikasi ke proyek Android Anda.


Widget untuk Android dapat meningkatkan pengalaman pengguna

Sebagai aturan umum, semakin sedikit langkah navigasi yang diperlukan untuk menyelesaikan tugas, semakin baik pengalaman pengguna.

Dengan menyediakan widget aplikasi, Anda dapat menghapus beberapa langkah navigasi dari alur aplikasi Anda yang paling umum digunakan. Dalam skenario kasus terbaik, pengguna Anda akan dapat memperoleh informasi yang mereka butuhkan hanya dengan melirik homescreen mereka, atau melakukan tugas yang diinginkan hanya dengan mengetuk tombol di widget kontrol Anda.

Lebih kuat dari pintasan aplikasi

Widget aplikasi sering merespons peristiwa onClick dengan meluncurkan tingkat teratas dalam aplikasi terkait, mirip dengan pintasan aplikasi. Namun, widget juga dapat memberikan akses langsung ke Aktivitas tertentu dalam suatu aplikasi, misalnya mengetuk pemberitahuan Baru Diterima widget mungkin meluncurkan aplikasi terkait dengan yang baru sudah terbuka.

Dengan menyematkan banyak tautan dalam tata letak widget Anda, Anda dapat memberikan akses sekali ketuk ke semua Aktivitas terpenting aplikasi Anda, menghapus lebih banyak langkah navigasi dari alur yang paling sering Anda gunakan.

Dengan menyematkan banyak tautan di tata letak widget Anda, Anda dapat memberikan akses sekali ketuk ke semua Aktivitas terpenting aplikasi Anda.

Perhatikan bahwa widget hanya merespons acara onClick, yang mencegah pengguna berinteraksi secara tidak sengaja dengan widget Anda saat mereka menggesekkan sekitar homescreen. Satu-satunya pengecualian adalah ketika pengguna mencoba untuk menghapus widget Anda dengan menyeretnya ke tindakan Penghapusan homescreen mereka, karena dalam skenario ini widget Anda akan merespons gerakan gesek vertikal.

Interaksi ini dikelola oleh sistem Android, jadi Anda tidak perlu khawatir tentang penerapan dukungan gesekan vertikal secara manual di widget Anda.

Buat widget Android untuk mendorong keterlibatan jangka panjang

Meyakinkan orang untuk mengunduh aplikasi Anda hanyalah langkah pertama untuk membuat aplikasi Android yang sukses. Kemungkinannya adalah, jika Anda mengambil ponsel cerdas atau tablet Android Anda sendiri dan menggesek laci aplikasi, maka Anda akan menemukan beberapa aplikasi yang belum pernah Anda gunakan dalam hitungan hari, minggu, atau bahkan berpotensi berbulan-bulan!

Baca juga:Memulai dengan Facebook untuk Android SDK

Setelah aplikasi Anda berhasil diinstal pada perangkat pengguna, Anda harus bekerja keras untuk membuatnya tetap terlibat dan menikmati aplikasi Anda. Memberi kehadiran aplikasi Anda di homescreen bisa menjadi alat yang ampuh untuk membantu mendorong keterlibatan jangka panjang, hanya karena itu adalah pengingat konstan bahwa aplikasi Anda ada!

Widget yang dirancang dengan baik juga dapat berfungsi sebagai iklan berkelanjutan untuk aplikasi Anda. Setiap kali pengguna melirik homescreen mereka, widget Anda memiliki kesempatan untuk secara aktif mendorong mereka untuk kembali terlibat dengan aplikasi Anda, dengan menghadirkan semua konten aplikasi Anda yang paling menarik dan bermanfaat.

Membuat widget aplikasi koleksi

Dalam tutorial ini, kami akan membuat widget koleksi yang menampilkan array sebagai ListView yang dapat digulir.

Untuk membantu Anda melacak siklus hidup aplikasi widget, widget ini juga akan memicu berbagai bersulang saat bergerak melalui berbagai negara siklus hidup. Menjelang akhir tutorial ini, kami akan meningkatkan widget kami dengan gambar pratinjau khusus yang akan ditampilkan di Android Picker Widget, dan Kegiatan konfigurasi, yang akan memungkinkan pengguna untuk menyesuaikan widget sebelum menempatkannya di layar awal.

Buat proyek Android baru dengan pengaturan pilihan Anda, dan mari kita mulai!

Membangun tata letak widget Anda

Untuk memulai, mari tentukan antarmuka pengguna widget (UI).

Widget aplikasi ditampilkan dalam suatu proses di luar aplikasi Anda, sehingga Anda hanya dapat menggunakan tata letak dan Tampilan yang didukung oleh RemoteViews.

Saat membangun tata letak Anda, Anda dibatasi untuk yang berikut:

  • Jam analog
  • Tombol
  • Pencatat waktu
  • FrameLayout
  • GridLayout
  • ImageButton
  • ImageView
  • LinearLayout
  • ProgressBar
  • RelativeLayout
  • TextView
  • ViewStub
  • AdapterViewFlipper
  • Tampilan bergaris
  • ListView
  • StackView
  • ViewFlipper

Perhatikan bahwa subclass dari kelas dan Tampilan di atas adalah tidak didukung.

Buat file sumber daya tata letak baru bernama list_widget.xml. Karena kami akan menampilkan data kami menggunakan ListView, tata letak ini berfungsi sebagai wadah untuk a elemen:

Mengisi widget koleksi

Selanjutnya, kita perlu membuat penyedia data untuk ListView kita. Buat kelas Java baru bernama DataProvider.java dan tambahkan berikut ini:

impor android.content.Context; impor android.content.Intent; import android.widget.RemoteViews; impor android.widget.RemoteViewsService; import java.util.ArrayList; import java.util.List; impor android.R.id.text1 statis; impor android.R.layout.simple_list_item_1 statis; DataProvider kelas publik mengimplementasikan RemoteViewsService.RemoteViewsFactory {Daftar myListView = ArrayList baru <> (); Konteks mContext = null; DataProvider publik (Konteks konteks, Intent intent) {mContext = konteks; } @Override public void onCreate () {initData (); } @Override public void onDataSetChanged () {initData (); } @Override public void onDestroy () {} @Override public int getCount () {return myListView.size (); } @Override RemoteViews publik getViewAt (posisi int) {tampilan RemoteViews = RemoteViews baru (mContext.getPackageName (), simple_list_item_1); view.setTextViewText (text1, myListView.get (position)); tampilan kembali; } @Override RemoteViews publik getLoadingView () {return null; } @Override public int getViewTypeCount () {return 1; } @Menggantikan public long getItemId (posisi int) {posisi kembali; } @Override public boolean hasStableIds () {return true; } private void initData () {myListView.clear (); untuk (int i = 1; i <= 15; i ++) {myListView.add ("item ListView" + i); }}}

AppWidgetProvider: Mengkonfigurasi widget Anda

Untuk membuat widget Android, Anda perlu membuat beberapa file.

File khusus widget pertama kami adalah AppWidgetProvider, yang merupakan BroadcastReceiver tempat Anda akan menentukan berbagai metode siklus hidup widget, seperti metode yang dipanggil saat widget Anda pertama kali dibuat dan metode yang disebut ketika widget itu akhirnya dihapus.

Buat kelas Java baru (File> Baru> Kelas Java) bernama CollectionWidget.

Untuk memulai, semua file penyedia widget harus diperluas dari kelas AppWidgetProvider. Kita kemudian perlu memuat file resource layout list_widget.xml ke objek RemoteViews, dan memberi tahu AppWidgetManager tentang objek RemoteViews yang diperbarui:

CollectionWidget kelas publik memperluas AppWidgetProvider {static void updateAppWidget (konteks konteks, AppWidgetManager appWidgetManager, int appWidgetId) {// Instantiate objek RemoteViews // Tampilan RemoteViews = RemoteViews baru (konteks, getlaypack.Name); setRemoteAdapter (konteks, tampilan); // Minta AppWidgetManager memperbarui widget aplikasi // appWidgetManager.updateAppWidget (appWidgetId, views); }

Buat adaptor

Karena kami menampilkan data kami di ListView, kami perlu mendefinisikan metode setRemoteAdapter () di AppWidgetProvider kami. SetRemoteAdapter () sama dengan memanggil AbsListView.setRemoteViewsAdapter () tetapi dirancang untuk digunakan dalam widget aplikasi.

Dalam metode ini, kita perlu menentukan id dari AdapterView (R.id.widget_list) dan maksud dari layanan yang pada akhirnya akan memberikan data ke RemoteViewsAdapter kita - kita akan segera membuat kelas Layanan Widget ini segera.

private static void setRemoteAdapter (Konteks konteks, @NonNull tampilan RemoteViews akhir) {views.setRemoteAdapter (R.id.widget_list, Intent baru (konteks, WidgetService.class)); }}

Menentukan metode siklus hidup widget

Di AppWidgetProvider kami, kami juga perlu mendefinisikan metode siklus hidup widget berikut:

Mengambil konten baru dengan onUpdate

Metode siklus hidup widget onUpdate () bertanggung jawab untuk memperbarui Tampilan widget Anda dengan informasi baru.

Metode ini disebut setiap kali:

  • Pengguna melakukan tindakan yang secara manual memicu metode onUpdate ().
  • Interval pembaruan yang ditentukan aplikasi telah lewat.
  • Pengguna menempatkan instance baru widget ini di layar beranda mereka.
  • Maksud siaran ACTION_APPWIDGET_RESTORED dikirimkan ke AppWidgetProvider. Niat siaran ini dipicu jika widget pernah dikembalikan dari cadangan.

Ini juga tempat Anda akan mendaftarkan penangan acara apa pun yang harus digunakan widget Anda.

Saat memperbarui widget Android, penting untuk diingat bahwa pengguna dapat membuat beberapa instance widget yang sama. Misalnya, mungkin widget Anda dapat disesuaikan dan pengguna memutuskan untuk membuat beberapa "versi" yang menampilkan informasi berbeda, atau menyediakan akses ke fungsi unik.

Saat Anda menelepon pada Pembaruan (), Anda perlu menentukan apakah Anda memperbarui setiap instance widget ini, atau hanya instance spesifik. Jika Anda ingin memperbarui setiap instance, maka Anda dapat menggunakan appWidgetIds, yang merupakan array ID yang mengidentifikasi setiap instance di seluruh perangkat.

Dalam cuplikan berikut, saya memperbarui setiap contoh:

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

Perhatikan bahwa untuk membantu menjaga kode tetap jelas, metode onUpdate () ini saat ini tidak membuat perubahan apa pun pada widget.

onEnabled: Melakukan pengaturan awal

Metode siklus hidup onEnabled () dipanggil sebagai respons terhadap ACTION_APPWIDGET_ENABLED, yang dikirim ketika instance widget Anda ditambahkan ke layar beranda untuk pertama waktu. Jika pengguna membuat dua instance widget Anda, maka onEnabled () akan dipanggil untuk instance pertama, tetapi tidak untuk kedua.

Metode siklus hidup onEnabled () adalah tempat Anda harus melakukan pengaturan apa pun yang diperlukan untuk semua instance widget Anda, seperti membuat database yang akan memberi makan informasi widget Anda.

Saya akan menampilkan roti panggang, sehingga Anda dapat melihat dengan tepat kapan metode siklus hidup ini disebut:

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

Perhatikan bahwa jika pengguna menghapus semua instance widget Anda dan kemudian membuat instance baru, maka ini digolongkan sebagai instance pertama, dan metode siklus hidup onEnabled () akan dipanggil sekali lagi.

Membersihkan, dengan onDisabled

Metode onDisabled () dipanggil sebagai respons terhadap ACTION_APPWIDGET_DISABLED, yang dipicu ketika pengguna menghapus terakhir contoh widget Anda.

Metode siklus hidup widget ini adalah tempat Anda harus membersihkan semua sumber daya yang Anda buat di metode onEnabled (), misalnya menghapus database yang Anda buat di onEnabled ().

Untuk membantu menjaga kode kami terus terang, saya hanya akan menampilkan bersulang setiap kali metode ini dipicu:

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

AppWidgetProvider yang selesai

File CollectionWidget Anda sekarang akan terlihat seperti ini:

impor android.appwidget.AppWidgetManager; impor android.appwidget.AppWidgetProvider; impor android.content.Context; impor androidx.annotation.NonNull; impor android.content.Intent; import android.widget.RemoteViews; impor android.widget.Toast; // Perpanjang dari kelas AppWidgetProvider // kelas publik CollectionWidget memperluas AppWidgetProvider {static void updateAppWidget (Konteks konteks, AppWidgetManager appWidgetManager, int appWidgetId) {// Muat file sumber daya tata letak ke objek RemoteViews // tampilan RemoteViews = konteks baru RemoteViews (konteks. getPackageName (), R.layout.list_widget); setRemoteAdapter (konteks, tampilan); // Beri tahu AppWidgetManager tentang objek RemoteViews // appWidgetManager.updateAppWidget (appWidgetId, views); } @Override public void onUpdate (Konteks konteks, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId: appWidgetId) {updateAppWidget (konteks, appWidgetManager, appWidgetId); } super.onUpdate (konteks, appWidgetManager, appWidgetIds); } @Override public void onEnabled (Konteks konteks) {Toast.makeText (konteks, "onEnabled disebut", Toast.LENGTH_LONG) .show (); } @Override public void onDisabled (Konteks konteks) {Toast.makeText (konteks, "onDisabled disebut", Toast.LENGTH_LONG) .show (); }}} private static void setRemoteAdapter (Konteks konteks, @NonNull final RemoteViews views) {views.setRemoteAdapter (R.id.widget_list, Intent baru (konteks, WidgetService.class)); }}

File AppWidgetProviderInfo

Widget aplikasi Anda juga memerlukan file AppWidgetProviderInfo, yang mendefinisikan beberapa properti penting, termasuk dimensi minimum widget Anda dan seberapa sering harus diperbarui.

File AppWidgetProviderInfo disimpan di folder res / xml proyek Anda.

Jika proyek Anda belum mengandung folder ini, maka Anda harus membuatnya:

  • Kontrol-klik folder proyek Anda.
  • Pilih Baru> Direktori Sumber Daya Android.
  • Di jendela berikutnya, buka dropdown tipe Sumber Daya, dan pilih xml.
  • Nama Direktori harus diperbarui ke xml secara otomatis, tetapi jika tidak maka Anda harus mengubahnya secara manual.
  • Klik OK.

Selanjutnya, buat file collection_widget_info, yang akan kami gunakan sebagai AppWidgetProviderInfo kami:

  • Kontrol-klik folder xml proyek Anda.
  • Pilih Baru> file sumber daya XML.
  • Namai file ini collection_widget_info.
  • Klik OK.

Dalam file AppWidgetProviderInfo kami, kami perlu mendefinisikan properti berikut:

1. android: previewImage

Ini adalah drawable yang mewakili widget aplikasi Anda di Widget Picker perangkat.

Jika Anda tidak memberikan previewImage, maka Android akan menggunakan ikon aplikasi Anda. Untuk mendorong pengguna memilih widget Anda dari Widget Picker, Anda harus memberikan gambar yang menunjukkan bagaimana widget Anda akan terlihat setelah dikonfigurasi dengan benar di layar beranda pengguna.

Cara termudah untuk membuat gambar pratinjau, adalah dengan menggunakan aplikasi Pratinjau Widget yang termasuk dalam emulator Android. Aplikasi ini memungkinkan Anda mengkonfigurasi widget dan kemudian menghasilkan gambar, yang kemudian dapat Anda gunakan dalam proyek Android Anda.

Kami akan membuat gambar ini setelah kami selesai membangun widget kami, jadi untuk saat ini saya akan menggunakan sumber daya mipmap / ic_launcher yang dibuat secara otomatis sebagai gambar pratinjau sementara.

2. android: widgetCategory

Widget aplikasi harus ditempatkan di dalam Host Widget Aplikasi, yang biasanya merupakan homescreen Android persediaan, tetapi juga dapat menjadi peluncur pihak ketiga seperti Evie Launcher atau Nova Launcher.

Antara API level 17 dan 20, dimungkinkan untuk menempatkan widget aplikasi di homescreen atau layar kunci, tetapi dukungan layar kunci sudah tidak digunakan lagi di API level 21.

Anda dapat menentukan apakah widget aplikasi Anda dapat ditempatkan di layar awal, layar kunci (yang Android sebut sebagai "pelindung tombol") atau keduanya, menggunakan atribut android: widgetCategory. Karena tidak mungkin menempatkan widget di layar kunci di versi Android terbaru, kami hanya akan menargetkan layar beranda.

Untuk menjaga privasi pengguna, widget Anda tidak boleh menampilkan informasi sensitif atau pribadi saat ditempatkan di layar kunci.

Jika Anda memberi pengguna opsi untuk menempatkan widget Anda di layar kunci, maka siapa pun yang melirik perangkat pengguna berpotensi melihat widget Anda, dan semua kontennya. Untuk membantu menjaga privasi pengguna, widget Anda tidak boleh menampilkan informasi sensitif atau pribadi saat ditempatkan di layar kunci. Jika widget Anda memang berisi data pribadi, maka Anda mungkin ingin mempertimbangkan untuk menyediakan tata letak homescreen dan lockscreen yang terpisah.

3. android: initialLayout

Ini adalah file sumber daya tata letak yang harus digunakan widget Anda ketika ditempatkan di homescreen, yang untuk proyek kami adalah list_widget.xml.

4. android: resizeMode = ”horizontal | vertikal”

Atribut android: resizeMode memungkinkan Anda menentukan apakah widget Anda dapat diubah ukurannya secara horizontal, vertikal, atau sepanjang kedua sumbu.

Untuk memastikan widget Anda ditampilkan dan berfungsi dengan benar di berbagai layar, Anda disarankan untuk mengubah ukuran widget secara horizontal dan secara vertikal, kecuali jika Anda memiliki alasan khusus untuk tidak melakukannya.

5. android: minHeight dan android: minWidth

Jika widget Anda dapat diubah ukurannya, maka Anda perlu memastikan pengguna tidak menyusutkan widget Anda ke titik di mana itu menjadi tidak dapat digunakan. Anda dapat menggunakan atribut minHeight dan minWidth untuk menentukan aplikasi terkecil yang akan menyusut saat diubah ukurannya oleh pengguna.

Nilai-nilai ini juga mewakili ukuran awal widget Anda, jadi jika widget Anda tidak dapat diubah ukurannya maka minHeight dan minWidth akan menentukan ukuran permanen widget.

6. android: updatePeriodMillis

AppWidgetProviderInfo juga tempat Anda menentukan seberapa sering widget Anda meminta informasi baru.

Interval pembaruan terkecil yang didukung adalah sekali setiap 1800000 milidetik (30 menit). Bahkan jika Anda mendeklarasikan interval pembaruan yang lebih pendek, widget Anda masih hanya akan diperbarui sekali setiap setengah jam.

Meskipun Anda mungkin ingin menampilkan informasi terbaru secepat mungkin, sistem akan bangun perangkat tidur untuk mengambil informasi baru. Pembaruan yang sering dapat membakar baterai perangkat, terutama selama periode di mana perangkat dibiarkan menganggur selama periode waktu yang signifikan, seperti bermalam. Memberikan pengalaman pengguna sebaik mungkin berarti menyeimbangkan antara membatasi konsumsi baterai, dan memberikan informasi baru dalam kerangka waktu yang masuk akal.

Anda juga harus mempertimbangkan jenis konten yang akan ditampilkan widget Anda.

Anda juga harus mempertimbangkan jenis konten yang akan ditampilkan widget Anda untuk Android. Misalnya, widget cuaca mungkin hanya perlu mengambil prakiraan yang diperbarui sekali per hari, sedangkan aplikasi yang menampilkan berita terkini harus lebih sering diperbarui.

Untuk menemukan keseimbangan sempurna ini, Anda mungkin perlu menguji widget Anda di berbagai frekuensi pembaruan dan mengukur dampaknya terhadap usia baterai, dan ketepatan waktu konten widget Anda. Jika Anda memiliki kelompok penguji yang bersedia, maka Anda bahkan dapat mengatur pengujian A / B, untuk melihat apakah beberapa frekuensi pembaruan diterima lebih positif daripada yang lain.

Aalso membaca: AndroidManifest.xml semua yang perlu Anda ketahui

Terakhir, setelah Anda mengidentifikasi interval pembaruan yang sempurna, Anda mungkin ingin menggunakan interval yang lebih pendek saat mengembangkan dan menguji aplikasi Anda. Misalnya, Anda dapat menggunakan frekuensi pembaruan sesingkat mungkin (android: updatePeriodMillis = "1800000 ″) ketika Anda menguji bahwa metode onUpdate () aplikasi Anda memicu dengan benar, dan kemudian mengubah nilai ini sebelum melepaskan aplikasi Anda ke masyarakat umum.

AppWidgetProviderInfo yang sudah selesai

File collection_widget_info.xml yang sudah selesai akan terlihat seperti ini:

Jangan mengacaukan homescreen pengguna!

Untuk memastikan homescreen tidak terlihat berantakan, kami akan menambahkan beberapa padding dan margin ke widget kami. Jika proyek Anda belum mengandung file dimens.xml, maka Anda harus membuatnya:

  • Kontrol-klik folder nilai proyek Anda.
  • Pilih Baru> File sumber daya Nilai.
  • Berikan file ini nama dimens.
  • Klik OK.

Buka file dimens.xml Anda dan tentukan nilai margin dan padding berikut:

10dp 8dp

Mengirim data ke widget

Selanjutnya, kita perlu membuat layanan widget, yang akan bertanggung jawab untuk mengirim data koleksi kami ke widget.

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

impor android.content.Intent; impor android.widget.RemoteViewsService; WidgetService kelas publik memperluas RemoteViewsService {@Override public RemoteViewsFactory onGetViewFactory (Intent intent) {kembalikan DataProvider baru (this, intent); }}

Mendaftarkan widget Anda di Manifest

Kami sekarang perlu membuat beberapa perubahan pada Manifest proyek kami.

Untuk memulai, buka Manifest dan daftarkan widget Anda sebagai BroadcastReceiver. Kami juga perlu menambahkan filter maksud untuk tindakan android.appwidget.action.APPWIDGET_UPDATE:

Selanjutnya, Anda perlu menentukan penyedia widget aplikasi:

Terakhir, kita perlu mendeklarasikan layanan yang akan mengirim data ke widget kita, yang dalam hal ini adalah kelas WidgetService. Layanan ini memerlukan izin android.permission.BIND_REMOTEVIEWS:

Uji widget Anda

Jika Anda telah mengikuti tutorial ini, maka Anda sekarang akan memiliki widget koleksi lengkap yang menampilkan sekumpulan data di layar beranda pengguna.

Jika ini adalah proyek Android kehidupan nyata, maka biasanya Anda akan memperluas metode siklus hidup, khususnya metode onUpdate (), tetapi hanya ini yang kita butuhkan untuk membuat widget yang dapat Anda instal dan uji pada perangkat Android Anda:

  • Instal proyek ini di smartphone Android yang kompatibel, tablet atau AVD (Perangkat Virtual Android).
  • Tekan lama bagian kosong dari layar beranda, dan pilih Widget saat diminta; ini meluncurkan Pemilih Widget.
  • Geser melalui Pemilih Widget hingga Anda menemukan widget aplikasi yang baru saja Anda buat.
  • Tekan lama widget ini untuk menambahkannya ke layar beranda Anda.
  • Karena ini adalah contoh pertama widget khusus ini, metode onEnabled () harus dijalankan, dan Anda akan melihat roti bakar "onEnabled disebut".
  • Ubah ukuran widget Anda. Jika Anda menetapkan ukuran minimum yang didukung, maka periksa apakah Anda tidak dapat mengecilkan widget melewati nilai ini.
  • Tes bahwa ListView menggulir, seperti yang diharapkan.
  • Selanjutnya, Anda harus memeriksa metode onDisabled (), dengan menghapus widget Anda. Tekan lama widget, lalu pilih Hapus dari Layar beranda. Karena ini adalah instance terakhir dari widget khusus ini, metode onDisabled () akan berjalan, dan Anda akan melihat roti bakar "onDisabled dipanggil".

Ini semua yang Anda butuhkan untuk memberikan widget aplikasi Android yang berfungsi, tetapi ada beberapa tambahan yang sering dapat meningkatkan pengalaman pengguna. Di bagian berikut, kami akan menganjurkan pengguna untuk memilih widget ini dari Pemilih Widget, dengan membuat gambar pratinjau yang menampilkan widget yang terbaik. Saya juga akan menunjukkan kepada Anda cara membuat widget yang sepenuhnya dapat disesuaikan, dengan menambahkan Kegiatan konfigurasi ke proyek Anda.

Membuat gambar pratinjau widget Android

Jika Anda mengambil perangkat Android dan menggesek Widget Picker, Anda akan melihat bahwa setiap widget diwakili oleh gambar, yang biasanya menunjukkan bagaimana widget ini akan terlihat setelah dikonfigurasi di layar beranda pengguna.

Untuk mendorong pengguna memilih widget Anda, Anda harus menyediakan gambar pratinjau yang menyoroti semua informasi dan fitur berguna yang ditawarkan widget Anda.

Anda dapat dengan cepat dan mudah membuat gambar pratinjau, menggunakan aplikasi Pratinjau Widget yang termasuk dalam emulator Android.

Perhatikan bahwa Pratinjau Widget tidak termasuk dalam gambar sistem Android terbaru, jadi Anda harus membuat AVD menggunakan Nougat (API Level 25) atau sebelumnya:

  • Instal aplikasi Anda pada AVD yang menjalankan API 25 atau lebih rendah.
  • Buka laci aplikasi AVD dan luncurkan aplikasi Pratinjau Widget.
  • Pratinjau Widget akan menampilkan daftar setiap aplikasi yang saat ini diinstal pada AVD ini; pilih aplikasi Anda dari daftar.

  • Widget Anda sekarang akan ditampilkan pada latar belakang kosong. Luangkan waktu untuk mengubah ukuran dan mengutak-atik widget Anda hingga menunjukkan yang terbaik yang ditawarkan widget Anda.
  • Setelah puas dengan tampilan dan konten widget Anda, pilih Ambil Foto.

  • Untuk mengambil foto Anda, beralih kembali ke Android Studio dan pilih Lihat> Alat Windows> Device File Explorer dari toolbar. Ini meluncurkan Device File Explorer Android Studio.
  • Di Device File Explorer, navigasikan ke sdcard / Unduh. Anda harus menemukan gambar pratinjau disimpan dalam format berikut: _ori_.png

  • Seret gambar ini dari Android Studio dan letakkan di tempat yang mudah diakses, seperti Desktop Anda.
  • Beri nama file gambar ini deskriptif.
  • Seret dan jatuhkan file ke dalam folder yang dapat ditarik proyek Anda.
  • Buka AppWidgetProviderInfo Anda, yang untuk proyek ini adalah collection_widget_info.xml.
  • Temukan android: previewImage = "@ mipmap / ic_launcher" dan perbarui untuk referensi gambar pratinjau Anda.

Widget Anda sekarang akan menggunakan sumber gambar baru ini sebagai gambar pratinjau:

  • Instal proyek yang diperbarui di perangkat Android fisik Anda atau AVD.
  • Tekan lama bagian kosong layar beranda.
  • Ketuk Widget, yang meluncurkan Pemilih Widget.
  • Gulir ke widget Anda; seharusnya sekarang menggunakan gambar pratinjau yang diperbarui.

Widget yang dapat disesuaikan: Menambahkan Aktivitas konfigurasi

Aktivitas konfigurasi diluncurkan secara otomatis ketika pengguna menempatkan setiap instance widget Anda di layar beranda.

Ada beberapa alasan mengapa Anda mungkin ingin menambahkan Aktivitas konfigurasi ke proyek Anda.

widget cenderung memberikan pengalaman pengguna terbaik ketika mereka memberikan akses ke informasi atau fitur yang paling penting bagi pengguna individu.

Pertama, beberapa widget memerlukan pengaturan awal, misalnya widget yang menampilkan peringatan lalu lintas mungkin perlu mengetahui alamat rumah pengguna, di mana mereka bekerja, dan waktu ketika mereka biasanya bepergian. Tanpa beberapa cara untuk memasukkan informasi ini, widget Anda mungkin sama sekali tidak berguna!

Selain itu, widget cenderung memberikan pengalaman pengguna terbaik ketika mereka memberikan akses ke informasi atau fitur yang paling penting bagi pengguna individu. Dengan menambahkan Kegiatan konfigurasi ke proyek Anda, Anda dapat memberi pengguna kebebasan untuk memilih persis apa yang termasuk dalam widget Anda.

Bahkan penyesuaian yang relatif mudah, seperti mengubah latar belakang atau font widget, dapat memiliki dampak positif pada pengalaman pengguna - setelah semua, tidak ada yang akan menghargai widget yang secara visual berbenturan dengan sisa layar berandanya!

Tidak ada yang akan menghargai widget yang secara visual bentrok dengan sisa homescreen mereka!

Sebagai alternatif, kadang-kadang Anda mungkin memiliki daftar panjang konten yang ingin Anda sertakan dalam widget Anda, dan Anda berjuang untuk mempersempit opsi Anda. Aktivitas konfigurasi dapat menjadi cara untuk memanfaatkan semua ide Anda dengan baik, tanpa menciptakan widget yang berantakan dan membingungkan. Ingatlah bahwa mengatur widget tidak boleh terasa seperti tugas, jadi jika Anda memberikan Aktivitas konfigurasi, maka Anda disarankan untuk membatasi diri pada tiga opsi konfigurasi.

Mari menambahkan Kegiatan konfigurasi ke proyek kami!

Pertama, Aktivitas konfigurasi kami memerlukan tata letak, jadi buat file sumber daya tata letak baru bernama config_activity.xml.

Saya akan menambahkan tombol berikut ke tata letak ini:

  • Tombol konfigurasi. Dalam proyek kehidupan nyata, tombol ini akan memodifikasi widget dengan beberapa cara, misalnya menambah atau menghapus konten, atau mengubah seberapa sering widget diperbarui. Untuk menjaga agar kode kami tetap jelas, mengklik tombol ini hanya akan menampilkan roti panggang Opsi Konfigurasi.
  • Tombol pengaturan. Setelah pengguna puas dengan cara widget mereka dikonfigurasi, menekan tombol ini akan menempatkan widget yang baru dikonfigurasi di homescreen mereka.

Ini file config_activity.xml saya yang sudah selesai:

Buat Aktivitas Konfigurasi

Sekarang, kita perlu membuat Aktivitas konfigurasi kita.

Untuk memulai, buat kelas Java baru bernama ConfigActivity. Dalam Aktivitas ini, kami akan mengambil ID Widget Aplikasi dari maksud yang meluncurkan Aktivitas konfigurasi. Jika maksud ini tidak memiliki ID widget, maka kita perlu memanggil metode finish ():

Intent intent = getIntent (); Bundel ekstra = intent.getExtras (); if (ekstra! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish (); }

Selanjutnya, kita perlu membuat maksud pengembalian, meneruskan appWidgetId asli dan mengatur hasil dari Aktivitas konfigurasi:

Intent resultValue = new Intent (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); selesai(); }}}

Jika Anda memberikan Kegiatan konfigurasi, maka siaran ACTION_APPWIDGET_UPDATE tidak akan dikirim secara otomatis ketika Aktivitas konfigurasi diluncurkan, yang berarti metode onUpdate () biasa dipanggil saat pengguna membuat instance widget Anda.

Untuk memastikan widget Anda dibuat dengan informasi dan konten terbaru, Aktivitas konfigurasi Anda harus memicu permintaan onUpdate () pertama.

Ini ConfigActivity yang sudah lengkap:

impor android.app.Aktivitas; impor android.appwidget.AppWidgetManager; impor android.os.Bundle; impor android.widget.Button; impor android.content.Intent; impor android.view.View; impor android.view.View.OnClickListener; impor android.widget.Toast; ConfigActivity kelas publik memperluas Activity {@Override void onCreate yang dilindungi (Bundle saverInstanceState) {super.onCreate (savernstanceState); setContentView (R.layout.config_activity); setResult (RESULT_CANCELED); Tombol setupWidget = (Tombol) findViewById (R.id.setupWidget); setupWidget.setOnClickListener (OnClickListener baru () {@Override public void onClick (View v) {handleSetupWidget ();}}); Tombol configButton = (Tombol) findViewById (R.id.configButton); configButton.setOnClickListener (OnClickListener baru () {@Override public void onClick (View v) {handleConfigWidget ();}}); } private void handleSetupWidget () {showAppWidget (); } private void handleConfigWidget () {Toast.makeText (ConfigActivity.this, "Opsi konfigurasi", Toast.LENGTH_LONG) .show (); } int appWidgetId; private void showAppWidget () {appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; Intent intent = getIntent (); Bundel ekstra = intent.getExtras (); if (ekstra! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish (); } // TO DO: Lakukan konfigurasi // Intent resultValue = new Intent (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); selesai(); }}}

Setelah membuat Aktivitas konfigurasi, Anda harus mendeklarasikan Aktivitas ini dalam Manifes dan menentukan bahwa ia menerima tindakan APPWIDGET_CONFIGURE:

Akhirnya, karena Aktivitas konfigurasi direferensikan di luar lingkup paket, kami perlu mendeklarasikan Kegiatan ini di AppWidgetProviderInfo kami, yang dalam hal ini adalah file collection_widget_info.xml:

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

Menguji proyek Anda

Sekarang saatnya untuk menguji proyek Anda yang sudah selesai:

  • Instal proyek Anda yang diperbarui pada perangkat Android fisik atau AVD.
  • Hapus semua instance widget Anda sebelumnya, untuk memastikan Anda bekerja dengan versi terbaru.
  • Tekan lama area kosong pada layar beranda dan pilih Widget saat diminta.
  • Temukan widget Anda di Widget Picker dan tekan lama untuk memilihnya.
  • Jatuhkan widget ke layar beranda Anda. Aktivitas Konfigurasi harus diluncurkan secara otomatis.
  • Beri tombol Perform Some Configuration klik, dan roti bakar Pilihan Konfigurasi akan muncul, mengonfirmasi bahwa interaksi ini telah berhasil didaftarkan.
  • Bayangkan bahwa Anda telah mengubah pengaturan widget dan sekarang siap untuk meletakkannya di homescreen Anda; tekan tombol Create The Widget, dan widget ini harus dibuat dengan sukses.

Anda dapat mengunduh proyek widget koleksi yang sudah selesai dari GitHub.

Membungkus

Dalam artikel ini, kami membuat widget koleksi yang dapat digulir yang menampilkan kumpulan data di layar beranda pengguna.

Jika Anda ingin terus bekerja dengan proyek ini, maka Anda dapat mencoba menambahkan kode Anda sendiri ke metode onUpdate (), untuk membuat widget yang diperbarui dengan informasi baru pada interval yang ditentukan dalam file AppWidgetProviderInfo Anda (collection_widget_info).

Jika Anda membuat widget Android, pastikan untuk membagikan kreasi Anda di komentar di bawah!

Mate 30 Pro adalah ponel yang angat bagu, tetapi juga angat ulit untuk direkomendaikan karena ecara remi tidak memiliki ake ke aplikai Google dan Play tore. ecara tidak remi, olui yang mudah digunakan...

Huawei mengalami maa-maa ulit. Anda tidak akan mengetahuinya dengan melihat pada Mate 30 Pro, epotong kit berkilau yang memancarkan kemewahan dan teknologi mutakhir. Tapi kemudian Anda membuka kunci t...

Artikel Untuk Anda