Δημιουργήστε ένα Widget Android για την εφαρμογή σας

Συγγραφέας: Lewis Jackson
Ημερομηνία Δημιουργίας: 13 Ενδέχεται 2021
Ημερομηνία Ενημέρωσης: 1 Ιούλιος 2024
Anonim
Cara pantau harga CRYPTO di WIDGET
Βίντεο: Cara pantau harga CRYPTO di WIDGET

Περιεχόμενο


Από τις πρώτες ημέρες του λειτουργικού συστήματος, τα γραφικά στοιχεία για το Android έχουν επιτρέψει στους χρήστες να ασχολούνται με τις αγαπημένες τους εφαρμογές, από την άνεση της αρχικής τους οθόνης. Πώς δημιουργείτε ένα widget Android;

Για τον προγραμματιστή, τα γραφικά στοιχεία δίνουν στην εφαρμογή σας μια πολύτιμη παρουσία στην αρχική οθόνη του χρήστη. Αντί να μην είναι κρυμμένοι από το συρτάρι του app, θα υπενθυμιστούν στους χρήστες η εφαρμογή σας κάθε φορά βλέπουν στην αρχική τους οθόνη - ενώ παράλληλα δίνουν μια προεπισκόπηση του πιο ενδιαφέροντος και χρήσιμου περιεχομένου της εφαρμογής σας.

Τα Widgets δίνουν στην εφαρμογή σας πολύτιμη παρουσία στην αρχική οθόνη του χρήστη

Σε αυτό το άρθρο, θα σας δείξω πώς να παρέχετε μια καλύτερη εμπειρία χρήστη, ενθαρρύνοντας τους χρήστες να ασχοληθούν με την εφαρμογή σας, δημιουργώντας ένα widget Android! Μέχρι το τέλος αυτού του άρθρου, θα έχετε δημιουργήσει ένα γραφικό στοιχείο συλλογής με δυνατότητα κύλισης που θα εμφανίζει ένα πλήρες σύνολο δεδομένων στην αρχική οθόνη του χρήστη.


Για να διασφαλίσετε ότι παρέχετε το είδος του γραφικού στοιχείου που χρησιμοποιούν οι χρήστες θέλω για να τοποθετήσετε στην αρχική τους οθόνη, θα δημιουργήσουμε επίσης μια διαμόρφωση Δραστηριότητα, η οποία θα επιτρέπει στους χρήστες να προσαρμόζουν το περιεχόμενο, την εμφάνιση και τις λειτουργίες του widget. Τέλος, θα σας δείξω πώς μπορείτε να ενθαρρύνετε τους ανθρώπους να χρησιμοποιούν το widget σας, δημιουργώντας μια εικόνα προεπισκόπησης Widget που παρουσιάζει το καλύτερο που έχει το widget σας.

Επίσης, διαβάστε: Ανάπτυξη για πτυσσόμενες συσκευές: Τι πρέπει να γνωρίζετε

Τι είναι widgets για το Android;

Ένα widget εφαρμογής είναι μια ελαφριά, μικροσκοπική εφαρμογή που ζει στην αρχική οθόνη του χρήστη.

Τα γραφικά στοιχεία για το Android μπορούν να παρέχουν ένα εύρος περιεχομένου, αλλά γενικά εμπίπτουν σε μία από τις ακόλουθες κατηγορίες:


  • Γραφικό στοιχείο πληροφοριών. Πρόκειται για ένα μη πτυσσόμενο widget που εμφανίζει ορισμένες πληροφορίες, όπως η σημερινή πρόγνωση καιρού ή η ημερομηνία και η ώρα.
  • Τα γραφικά συλλογής. Πρόκειται για ένα πτυσσόμενο widget που εμφανίζει ένα σύνολο σχετικών δεδομένων, μορφοποιημένα ως ListView, GridView, StackView ή AdapterViewFlipper. Τα γραφικά συλλογής συνήθως υποστηρίζονται από μια πηγή δεδομένων, όπως μια βάση δεδομένων ή ένας πίνακας.
  • Ελέγξτε widgets. Αυτά τα γραφικά στοιχεία λειτουργούν ως ένα τηλεχειριστήριο που επιτρέπει στους χρήστες να αλληλεπιδρούν με την εφαρμογή σας, χωρίς πρέπει να το φέρει στο προσκήνιο. Οι εφαρμογές που αναπαράγουν πολυμέσα, όπως τα podcast ή η μουσική, έχουν συχνά στοιχεία ελέγχου που επιτρέπουν στο χρήστη να ενεργοποιήσει τις ενέργειες Αναπαραγωγή, Παύση και Παράλειψη απευθείας από την αρχική τους οθόνη.
  • Υβριδικά widgets. Ορισμένες φορές μπορεί να έχετε τη δυνατότητα να αποκομίσετε μια καλύτερη εμπειρία χρήστη συνδυάζοντας στοιχεία από πολλές κατηγορίες. Για παράδειγμα, αν αναπτύσσετε ένα widget ελέγχου για μια εφαρμογή μουσικής, μπορείτε να δώσετε στοιχεία αναπαραγωγής, παύσης και παράλειψης, αλλά μπορείτε επίσης να αποφασίσετε να εμφανίσετε ορισμένες πληροφορίες, όπως τον τίτλο του τραγουδιού και τον καλλιτέχνη. Αν αποφασίσετε να αναμίξετε και να ταιριάξετε, τότε μην παρασυρθείτε! Τα Widgets τείνουν να παρέχουν την καλύτερη εμπειρία χρήστη όταν παρέχουν εύκολη πρόσβαση σε ένα μικρό αριθμό έγκαιρων, σχετικών πληροφοριών ή σε μερικές συνήθεις λειτουργίες. Για να διατηρήσετε το υβριδικό σας widgets ελαφρύ, συνιστάται να προσδιορίσετε την κύρια κατηγορία του widget σας, να την αναπτύξετε σύμφωνα με αυτήν την κατηγορία και έπειτα προσθέστε μερικά στοιχεία από τη δευτερεύουσα κατηγορία του widget.

Το έργο μου χρειάζεται πραγματικά ένα widget εφαρμογής;

Υπάρχουν διάφοροι λόγοι για τους οποίους θα πρέπει να εξετάσετε την προσθήκη ενός widget εφαρμογής στο έργο σας Android.

Τα γραφικά στοιχεία για το Android μπορούν να βελτιώσουν την εμπειρία των χρηστών

Κατά γενικό κανόνα, όσο λιγότερα βήματα πλοήγησης απαιτούνται για την ολοκλήρωση μιας εργασίας, τόσο καλύτερη είναι η εμπειρία του χρήστη.

Παρέχοντας ένα widget εφαρμογής, μπορείτε να καταργήσετε πολλά βήματα πλοήγησης από τις πιο κοινές ροές της εφαρμογής σας. Στο βέλτιστο σενάριο, οι χρήστες σας θα μπορούν να λάβουν τις πληροφορίες που χρειάζονται απλά κοιτάζοντας στην αρχική τους οθόνη ή πραγματοποιώντας την επιθυμητή εργασία απλά πατώντας ένα κουμπί στο γραφικό στοιχείο ελέγχου.

Πιο ισχυρές από τις συντομεύσεις εφαρμογών

Τα γραφικά στοιχεία της εφαρμογής συχνά ανταποκρίνονται στα συμβάντα onClick ξεκινώντας το κορυφαίο επίπεδο στη σχετική εφαρμογή, παρόμοια με μια συντόμευση εφαρμογής. Ωστόσο, τα widgets μπορούν επίσης να παρέχουν άμεση πρόσβαση σε συγκεκριμένες Δραστηριότητες μέσα σε μια εφαρμογή, για παράδειγμα, πατώντας μια νέα ειδοποίηση από το widget, η Νέα ειδοποίηση ενδέχεται να εκκινήσει τη σχετική εφαρμογή με τη νέα που είναι ήδη ανοιχτή.

Με την ενσωμάτωση πολλαπλών συνδέσμων στη διάταξη του widget σας, μπορείτε να παρέχετε πρόσβαση με ένα πάτημα σε όλες τις πιο σημαντικές Δραστηριότητες της εφαρμογής σας, αφαιρώντας ακόμη περισσότερα βήματα πλοήγησης από τις ροές που χρησιμοποιούνται πιο συχνά.

Με την ενσωμάτωση πολλών συνδέσμων στη διάταξη του widget σας, μπορείτε να παρέχετε πρόσβαση με ένα κλικ για όλες τις πιο σημαντικές Δραστηριότητες της εφαρμογής σας.

Λάβετε υπόψη ότι τα γραφικά στοιχεία ανταποκρίνονται μόνο στα συμβάντα onClick, τα οποία εμποδίζουν τους χρήστες να αλληλεπιδρούν τυχαία με το γραφικό σας στοιχείο ενώ μετακινούνται γύρω από την αρχική οθόνη. Η μόνη εξαίρεση είναι όταν ο χρήστης προσπαθεί να διαγράψει το γραφικό στοιχείο σας σύροντάς τον προς την αρχική του οθόνη Αφαίρεση δράσης, όπως σε αυτό το σενάριο το γραφικό σας θα απαντήσει σε μια κίνηση κάθετης ολίσθησης.

Αυτή η αλληλεπίδραση διοικείται από το σύστημα Android, οπότε δεν χρειάζεται να ανησυχείτε για την μη αυτόματη εφαρμογή υποστήριξης κάθετης ολίσθησης στο γραφικό σας στοιχείο.

Δημιουργήστε ένα widget Android για να οδηγήσετε τη μακροπρόθεσμη αφοσίωση

Το να πείσετε τους χρήστες να κάνουν λήψη της εφαρμογής σας είναι μόνο το πρώτο βήμα για τη δημιουργία μιας επιτυχημένης εφαρμογής Android. Οι πιθανότητες είναι, εάν τραβήξετε το δικό σας smartphone ή tablet Android και σύρετε μέσα από το συρτάρι της εφαρμογής, τότε θα ανακαλύψετε πολλές εφαρμογές που δεν έχετε χρησιμοποιήσει σε ημέρες, εβδομάδες ή ακόμη και μήνες!

Διαβάστε επίσης:Ξεκινώντας με το SDK Facebook για Android

Μόλις εγκατασταθεί η εφαρμογή σας με επιτυχία στη συσκευή του χρήστη, θα πρέπει να εργαστείτε σκληρά για να διατηρήσετε την εμπλοκή σας και να απολαύσετε την εφαρμογή σας. Η παροχή της παρουσίας της εφαρμογής σας στην αρχική οθόνη μπορεί να είναι ένα ισχυρό εργαλείο για να σας βοηθήσει να διεγείρετε τη μακροπρόθεσμη δέσμευση, απλώς και μόνο επειδή είναι μια συνεχής υπενθύμιση ότι η αίτησή σας υπάρχει!

Ένα καλά σχεδιασμένο widget μπορεί επίσης να χρησιμεύσει ως συνεχής αγγελία για την εφαρμογή σας. Κάθε φορά που ο χρήστης κοιτάζει στην αρχική του οθόνη, το widget σας έχει την ευκαιρία να τον ενθαρρύνει ενεργά να ξανασυνδεθεί με την εφαρμογή σας, παρουσιάζοντάς τα με το πιο ενδιαφέρον και χρήσιμο περιεχόμενο της εφαρμογής σας.

Δημιουργία γραφικού στοιχείου εφαρμογής συλλογής

Σε αυτό το σεμινάριο, θα χτίσουμε ένα widget συλλογής που θα εμφανίζει έναν πίνακα ως ένα ListView με δυνατότητα κύλισης.

Για να σας βοηθήσει να παρακολουθείτε τον κύκλο ζωής του widget της εφαρμογής, αυτό το γραφικό στοιχείο θα ενεργοποιεί επίσης διάφορα toasts καθώς μετακινείται στις διαφορετικές καταστάσεις του κύκλου ζωής. Προς το τέλος αυτού του σεμιναρίου, θα βελτιώσουμε το γραφικό στοιχείο μας με μια προσαρμοσμένη εικόνα προεπισκόπησης που θα εμφανίζεται στον Widget Picker του Android και μια Δραστηριότητα διαμόρφωσης, η οποία θα επιτρέψει στους χρήστες να προσαρμόσουν το γραφικό στοιχείο πριν το τοποθετήσουν στην αρχική τους οθόνη.

Δημιουργήστε ένα νέο έργο Android με τις ρυθμίσεις της επιλογής σας και ας ξεκινήσουμε!

Δημιουργία διάταξης widget σας

Για να ξεκινήσετε, ας ορίσουμε τη διεπαφή χρήστη του widget (UI).

Τα widgets εφαρμογής εμφανίζονται σε μια διαδικασία εξω απο την εφαρμογή σας, ώστε να μπορείτε να χρησιμοποιήσετε μόνο τις διατάξεις και τις προβολές που υποστηρίζονται από το RemoteViews.

Κατά τη δημιουργία της διάταξής σας, περιορίζεστε στα εξής:

  • AnalogClock
  • Κουμπί
  • Χρονόμετρο
  • FrameLayout
  • GridLayout
  • ImageButton
  • ImageView
  • LinearLayout
  • ProgressBar
  • RelativeLayout
  • TextView
  • ViewStub
  • AdapterViewFlipper
  • GridView
  • Προβολή λίστας
  • StackView
  • ViewFlipper

Σημειώστε ότι οι υποκατηγορίες των παραπάνω κλάσεων και των προβολών είναι δεν υποστηρίζεται.

Δημιουργήστε ένα νέο αρχείο πόρων διαμόρφωσης που ονομάζεται list_widget.xml. Δεδομένου ότι θα προβάλλουμε τα δεδομένα μας με τη χρήση ενός ListView, αυτή η διάταξη χρησιμεύει κυρίως ως δοχείο για ένα στοιχείο:

Κατανομή του widget συλλογής

Στη συνέχεια, πρέπει να δημιουργήσουμε έναν παροχέα δεδομένων για το ListView. Δημιουργήστε μια νέα κλάση Java που ονομάζεται DataProvider.java και προσθέστε τα εξής:

εισαγωγή καιroid.content.Context. εισαγωγή καιroid.content.Intent; εισαγωγή καιroid.widget.RemoteViews; εισαγωγή καιroid.widget.RemoteViewsService; εισαγωγή java.util.ArrayList; εισαγωγή java.util.List; εισαγωγή στατικών καιroid.R.id.text1; εισαγωγή στατικού αρχείου android.R.layout.simple_list_item_1; ο δημόσιος Class DataProvider υλοποιεί το RemoteViewsService.RemoteViewsFactory {Λίστα myListView = νέο ArrayList <> (); Περιεχόμενο mContext = null; δημόσιος φορέας δεδομένων (πλαίσιο περιβάλλοντος, πρόθεση προσανατολισμού) {mContext = context; } @Override public void onCreate () {initData (); } @Override δημόσιο κενό onDataSetChanged () {initData (); } @Override δημόσιο κενό στοDestroy () {} @Override public int getCount () {επιστροφή myListView.size (); } @Ενεργοποίηση δημόσιων RemoteViews getViewAt (θέση int) {RemoteViews view = new RemoteViews (mContext.getPackageName (), simple_list_item_1); view.setTextViewText (κείμενο1, myListView.get (θέση)); προβολή επιστροφής. } @Ενεργοποίηση δημόσιων RemoteViews getLoadingView () {επιστροφή null; } @Override public int getViewTypeCount () {επιστροφή 1; } @Override δημόσιο μεγάλο getItemId (int θέση) {θέση επιστροφής; } @Override δημόσιο boolean hasStableIds () {return true; } ιδιωτική void initData () {myListView.clear (); για το (int i = 1; i <= 15; i ++) {myListView.add ("στοιχείο ListView" + i); }}}

AppWidgetProvider: Διαμόρφωση του γραφικού σας στοιχείου

Για να δημιουργήσετε ένα γραφικό στοιχείο Android, θα πρέπει να δημιουργήσετε πολλά αρχεία.

Το πρώτο μας αρχείο widget είναι το AppWidgetProvider, το οποίο είναι ένα BroadcastReceiver όπου θα ορίσετε τις διάφορες μεθόδους του κύκλου ζωής widget, όπως η μέθοδος που ονομάζεται όταν το widget δημιουργείται για πρώτη φορά και η μέθοδος που ονομάζεται όταν το widget τελικά διαγραφεί.

Δημιουργήστε μια νέα κλάση Java (Αρχείο> Νέα> Κατηγορία Java) που ονομάζεται CollectionWidget.

Για να ξεκινήσετε, όλα τα αρχεία παροχέα widget πρέπει να επεκταθούν από την κλάση AppWidgetProvider. Στη συνέχεια, πρέπει να φορτώσουμε το αρχείο resource_widget.xml σε ένα αντικείμενο RemoteViews και να ενημερώσουμε το AppWidgetManager για το ενημερωμένο αντικείμενο RemoteViews:

η δημόσια τάξη CollectionWidget επεκτείνει τον AppWidgetProvider {static void updateAppWidget (Περιεχόμενο περιβάλλοντος, AppWidgetManager appWidgetManager, int appWidgetId) {// Παράσταση του αντικειμένου RemoteViews // προβολές RemoteViews = νέες αποστολές RemoteViews (context.getPackageName (), R.layout.list_widget); setRemoteAdapter (πλαίσιο, προβολές); // Ζητήστε από το AppWidgetManager να ενημερώσει το widget εφαρμογής // appWidgetManager.updateAppWidget (appWidgetId, προβολές). }}

Δημιουργήστε τον προσαρμογέα

Εφόσον προβάλλουμε τα δεδομένα μας σε ένα ListView, πρέπει να ορίσουμε μια μέθοδο setRemoteAdapter () στον AppWidgetProvider μας. Το setRemoteAdapter () ισοδυναμεί με την κλήση του AbsListView.setRemoteViewsAdapter (), αλλά έχει σχεδιαστεί για να χρησιμοποιείται σε widget εφαρμογών.

Σε αυτήν τη μέθοδο, πρέπει να ορίσουμε την ταυτότητα του AdapterView (R.id.widget_list) και την πρόθεση της υπηρεσίας που θα παρέχει τελικά τα δεδομένα στο RemoteViewsAdapter μας - σύντομα θα δημιουργήσουμε αυτή την τάξη WidgetService.

ιδιωτικό στατικό κενό setRemoteAdapter (Περιεχόμενο περιβάλλοντος, @NonNull τελικές προβολές RemoteViews) {views.setRemoteAdapter (R.id.widget_list, νέα πρόθεση (context, WidgetService.class)); }}

Ορισμός των μεθόδων του κύκλου ζωής του widget

Στο AppWidgetProvider μας, πρέπει επίσης να ορίσουμε τις ακόλουθες μεθόδους του κύκλου ζωής του widget:

Ανάκτηση νέου περιεχομένου με την υπηρεσία OnUpdate

Η μέθοδος κύκλου ζωής του widget onUpdate () είναι υπεύθυνη για την ενημέρωση των προβολών του widget σας με νέες πληροφορίες.

Αυτή η μέθοδος ονομάζεται κάθε φορά:

  • Ο χρήστης εκτελεί μια ενέργεια που ενεργοποιεί με μη αυτόματο τρόπο τη μέθοδο onUpdate ().
  • Έχει περάσει το καθορισμένο διάστημα ενημέρωσης της εφαρμογής.
  • Ο χρήστης τοποθετεί μια νέα εμφάνιση αυτού του γραφικού στοιχείου στην αρχική του οθόνη.
  • Μια πρόθεση εκπομπής ACTION_APPWIDGET_RESTORED αποστέλλεται στον AppWidgetProvider. Αυτή η πρόθεση εκπομπής ενεργοποιείται εάν το γραφικό στοιχείο αποκατασταθεί ποτέ από το αντίγραφο ασφαλείας.

Αυτός είναι επίσης ο τόπος όπου θα καταχωρίσετε τους χειριστές συμβάντων που πρέπει να χρησιμοποιήσει το γραφικό σας στοιχείο.

Κατά την ενημέρωση ενός γραφικού στοιχείου Android, είναι σημαντικό να θυμάστε ότι οι χρήστες μπορούν να δημιουργούν πολλαπλές εμφανίσεις του ίδιου γραφικού στοιχείου. Για παράδειγμα, το widget σας μπορεί να προσαρμοστεί και ο χρήστης αποφασίζει να δημιουργήσει διάφορες "εκδόσεις" που εμφανίζουν διαφορετικές πληροφορίες ή παρέχουν πρόσβαση σε μοναδικές λειτουργίες.

Όταν καλείτε την ενημέρωση (), πρέπει να καθορίσετε αν ενημερώνετε κάθε στιγμιότυπο αυτού του γραφικού στοιχείου ή μόνο μια συγκεκριμένη εμφάνιση. Αν θέλετε να ενημερώσετε κάθε στιγμιότυπο, τότε μπορείτε να χρησιμοποιήσετε το appWidgetIds, το οποίο είναι ένας πίνακας αναγνωριστικών που αναγνωρίζει κάθε εμφάνιση σε όλη τη συσκευή.

Στο ακόλουθο απόσπασμα, ενημερώνω κάθε στιγμιότυπο:

@Inverride public void onUpdate (Περιεχόμενο περιβάλλοντος, appWidgetManager appWidgetManager, int appWidgetIds) {για (int appWidgetId: appWidgetIds) {// Ενημέρωση όλων των παρουσιών αυτού του widget // updateAppWidget (context, appWidgetManager, appWidgetId) } super.unUpdate (πλαίσιο, appWidgetManager, appWidgetIds). }}

Λάβετε υπόψη ότι για να διατηρηθεί ο κώδικας απλός, αυτή η μέθοδος onUpdate () δεν κάνει επί του παρόντος καμία αλλαγή στο γραφικό στοιχείο.

onΕνεργοποιημένο: Εκτέλεση της αρχικής ρύθμισης

Η μέθοδος onEnabled () του κύκλου ζωής καλείται σε απάντηση στο ACTION_APPWIDGET_ENABLED, το οποίο αποστέλλεται όταν μια παράσταση του γραφικού σας στοιχείου προστίθεται στην αρχική οθόνη για την πρώτα χρόνος. Αν ο χρήστης δημιουργήσει δύο στιγμιότυπα του γραφικού σας στοιχείου, τότε το onEnabled () θα καλείται για πρώτη φορά, αλλά δεν για το δεύτερο.

Η μέθοδος onEnabled () κύκλου ζωής είναι εκεί όπου πρέπει να εκτελέσετε οποιαδήποτε ρύθμιση που απαιτείται για όλες τις εμφανίσεις του γραφικού σας στοιχείου, όπως η δημιουργία της βάσης δεδομένων που θα τροφοδοτεί τις πληροφορίες widget σας.

Θα παρουσιάσω ένα τοστ, ώστε να μπορείτε να δείτε ακριβώς πότε ονομάζεται αυτή η μέθοδος κύκλου ζωής:

@Override δημόσιο κενό onEnabled (Πλαίσιο περιβάλλοντος) {Toast.makeText (πλαίσιο, "onEnabled ονομάζεται", Toast.LENGTH_LONG) .show (); }}

Σημειώστε ότι αν ο χρήστης διαγράψει όλες τις εμφανίσεις του γραφικού σας στοιχείου και στη συνέχεια δημιουργήσει μια νέα παρουσία, τότε αυτό κατατάσσεται ως η πρώτη περίπτωση και η μέθοδος του onEnabled () κύκλου ζωής θα καλείται και πάλι.

Καθαρισμός, με onDisabled

Η μέθοδος onDisabled () καλείται σε απάντηση στο ACTION_APPWIDGET_DISABLED, το οποίο ενεργοποιείται όταν ο χρήστης διαγράψει το τελευταίος παράδειγμα του widget σας.

Αυτή η μέθοδος του κύκλου ζωής του widget είναι εκεί όπου πρέπει να καθαρίσετε τους πόρους που δημιουργήσατε στη μέθοδο onEnabled (), για παράδειγμα, διαγράφοντας τη βάση δεδομένων που δημιουργήσατε στο onEnabled ().

Για να διατηρήσουμε τον κωδικό μας απλό, θα εμφανίζω απλώς ένα τοστ κάθε φορά που ενεργοποιείται αυτή η μέθοδος:

@Override public void onDisabled (Πλαίσιο περιβάλλοντος) {Toast.makeText (πλαίσιο, "onDisabled ονομάζεται", Toast.LENGTH_LONG) .show (); }}

Το ολοκληρωμένο AppWidgetProvider

Το αρχείο CollectionWidget θα πρέπει τώρα να φαίνεται ως εξής:

εισαγωγή καιroid.appwidget.AppWidgetManager; εισαγωγή καιroid.appwidget.AppWidgetProvider; εισαγωγή καιroid.content.Context. εισαγωγή android.annotation.NonNull; εισαγωγή καιroid.content.Intent; εισαγωγή καιroid.widget.RemoteViews; εισαγωγή καιroid.widget.Toast; // Επέκταση από την κλάση AppWidgetProvider // Δημόσια τάξη CollectionWidget επεκτείνει AppWidgetProvider {static void updateAppWidget (Περιεχόμενο περιβάλλοντος, appWidgetManager appWidgetManager, int appWidgetId) {// Φόρτωση του αρχείου πόρων διαμόρφωσης σε ένα αντικείμενο RemoteViews // RemoteViews views = new RemoteViews (context. getPackageName (), R.layout.list_widget). setRemoteAdapter (πλαίσιο, προβολές); // Ενημερώστε AppWidgetManager για το αντικείμενο RemoteViews // appWidgetManager.updateAppWidget (appWidgetId, προβολές). } @Override public void onUpdate (Πλαίσιο περιβάλλοντος, AppWidgetManager appWidgetManager, int appWidgetIds) {για (int appWidgetId: appWidgetIds) {updateAppWidget (context, appWidgetManager, appWidgetId) } super.unUpdate (πλαίσιο, appWidgetManager, appWidgetIds). } @Override public void onEnabled (Πλαίσιο περιβάλλοντος) {Toast.makeText (πλαίσιο, "onEnabled ονομάζεται", Toast.LENGTH_LONG) .show (); } @Override public void onDisabled (Πλαίσιο περιβάλλοντος) {Toast.makeText (πλαίσιο, "onDisabled ονομάζεται", Toast.LENGTH_LONG) .show (); } private static void setRemoteAdapter (Περιεχόμενο περιβάλλοντος, @NonNull τελικές προβολές RemoteViews) {views.setRemoteAdapter (R.id.widget_list, νέα πρόθεση (context, WidgetService.class)); }}

Το αρχείο AppWidgetProviderInfo

Το γραφικό στοιχείο της εφαρμογής σας απαιτεί επίσης ένα αρχείο AppWidgetProviderInfo, το οποίο ορίζει πολλές σημαντικές ιδιότητες, συμπεριλαμβανομένων των ελάχιστων διαστάσεων του widget και του βαθμού επικαιρότητάς του.

Το αρχείο AppWidgetProviderInfo αποθηκεύεται στο φάκελο res / xml του έργου σας.

Εάν το έργο σας δεν περιέχει ήδη αυτό το φάκελο, τότε θα πρέπει να το δημιουργήσετε:

  • Κάντε κλικ στο Control-κλικ στο φάκελο res του project.
  • Επιλέξτε Νέα> Κατάλογος πόρων Android.
  • Στο επόμενο παράθυρο, ανοίξτε την αναπτυσσόμενη λίστα Τύπος πόρων και επιλέξτε xml.
  • Το όνομα του καταλόγου θα πρέπει να ενημερώνεται αυτόματα στο xml, αλλά αν δεν το χρειάζεται τότε θα πρέπει να το αλλάξετε χειροκίνητα.
  • Κάντε κλικ στο κουμπί OK.

Στη συνέχεια, δημιουργήστε ένα αρχείο collection_widget_info, το οποίο θα χρησιμοποιήσουμε ως AppWidgetProviderInfo:

  • Ελέγξτε-κάντε κλικ στο φάκελο xml του έργου σας.
  • Επιλέξτε Νέο> αρχείο πόρων XML.
  • Ονομάστε αυτό το αρχείο collection_widget_info.
  • Κάντε κλικ στο κουμπί OK.

Στο αρχείο AppWidgetProviderInfo, πρέπει να ορίσουμε τις ακόλουθες ιδιότητες:

1. android: previewImage

Αυτό είναι το σχέδιο που αντιπροσωπεύει το widget της εφαρμογής σας στον Widget Picker της συσκευής.

Εάν δεν διαθέτετε previewImage, τότε το Android θα χρησιμοποιήσει το εικονίδιο της εφαρμογής σας. Για να ενθαρρύνετε τους χρήστες να επιλέξουν το γραφικό σας στοιχείο από το εργαλείο επιλογής παραθύρων, θα πρέπει να δώσετε ένα σχεδιάγραμμα που θα δείχνει πώς θα εμφανίζεται το γραφικό σας παράθυρο όταν έχει ρυθμιστεί σωστά στην αρχική οθόνη του χρήστη.

Ο ευκολότερος τρόπος για να δημιουργήσετε μια εικόνα προεπισκόπησης είναι να χρησιμοποιήσετε την εφαρμογή Preview Widget που περιλαμβάνεται στον εξομοιωτή Android. Αυτή η εφαρμογή σάς επιτρέπει να ρυθμίσετε το γραφικό σας στοιχείο και στη συνέχεια να δημιουργήσετε μια εικόνα, την οποία μπορείτε στη συνέχεια να χρησιμοποιήσετε στο έργο σας Android.

Θα δημιουργήσουμε αυτήν την εικόνα μόλις τελειώσουμε την κατασκευή του γραφικού στοιχείου μας, γι 'αυτό τώρα θα χρησιμοποιήσω τη δημιουργηθείσα αυτόματα πόρο mipmap / ic_launcher ως προσωρινή εικόνα προεπισκόπησης.

2. Android: widgetCategory

Τα widget εφαρμογών πρέπει να τοποθετούνται μέσα σε έναν Host Widget Host, ο οποίος είναι συνήθως ο αρχικός σταθμός Android, αλλά μπορεί επίσης να είναι εκκίνηση τρίτου μέρους όπως το Evie Launcher ή το Nova Launcher.

Μεταξύ των επιπέδων API 17 και 20, ήταν δυνατή η τοποθέτηση γραφικών εφαρμογών στην αρχική οθόνη ή η οθόνη κλειδώματος, αλλά η υποστήριξη κλειδώματος οθόνης αποκόπηκε στο επίπεδο API 21.

Μπορείτε να καθορίσετε εάν το γραφικό στοιχείο της εφαρμογής σας μπορεί να τοποθετηθεί στην αρχική οθόνη, στην οθόνη κλειδώματος (που το Android αναφέρεται ως "κλείδωμα πληκτρολογίου") ή και στα δύο, χρησιμοποιώντας το χαρακτηριστικό android: widgetCategory. Δεδομένου ότι δεν είναι δυνατό να τοποθετήσετε widgets στην οθόνη κλειδώματος στις πιο πρόσφατες εκδόσεις του Android, θα στοχεύουμε μόνο στην αρχική οθόνη.

Για να διατηρηθεί το απόρρητο του χρήστη, το γραφικό σας στοιχείο δεν πρέπει να εμφανίζει ευαίσθητες ή ιδιωτικές πληροφορίες όταν τοποθετείται στην κλειδαριά οθόνης.

Εάν δώσετε στους χρήστες τη δυνατότητα να τοποθετήσουν το γραφικό σας στοιχείο στην οθόνη κλειδώματος, τότε οποιοσδήποτε βλέπει στη συσκευή του χρήστη θα μπορούσε ενδεχομένως να δει το γραφικό σας στοιχείο και όλο το περιεχόμενό του. Για να διατηρήσετε το απόρρητο του χρήστη, το γραφικό σας στοιχείο δεν πρέπει να εμφανίζει ευαίσθητες ή ιδιωτικές πληροφορίες όταν τοποθετείται στην κλειδαριά οθόνης. Εάν το γραφικό σας στοιχείο περιέχει προσωπικά δεδομένα, τότε ίσως θελήσετε να εξετάσετε το ενδεχόμενο παροχής ξεχωριστών διατάξεων οθόνης αρχικής οθόνης και κλειδώματος οθόνης.

3. android: initialLayout

Αυτό είναι το αρχείο πόρων διαμόρφωσης που θα πρέπει να χρησιμοποιήσει το γραφικό σας widget όταν τοποθετηθεί στην αρχική οθόνη, το οποίο για το έργο μας είναι list_widget.xml.

4. android: resizeMode = "οριζόντια | κάθετη"

Το χαρακτηριστικό android: resizeMode σας επιτρέπει να καθορίσετε αν το widget σας μπορεί να αλλάξει οριζόντια, κάθετα ή κατά μήκος και των δύο αξόνων.

Για να διασφαλίσετε ότι το widget σας εμφανίζεται και λειτουργεί σωστά σε διάφορες οθόνες, συνιστάται να επιτρέπετε την αλλαγή μεγέθους του γραφικού στοιχείου σε οριζόντια και κάθετα, εκτός εάν έχετε συγκεκριμένο λόγο να μην το κάνετε.

5. Android: minHeight και Android: minWidth

Αν το widget σας είναι ανθεκτικό σε μέγεθος, τότε πρέπει να διασφαλίσετε ότι ο χρήστης δεν θα συρρικνώσει το γραφικό στοιχείο σας στο σημείο όπου θα γίνει άχρηστο. Μπορείτε να χρησιμοποιήσετε τα χαρακτηριστικά minHeight και minWidth για να ορίσετε το μικρότερο που θα συρρικνωθεί η εφαρμογή σας όταν αλλάξει το μέγεθος από το χρήστη.

Αυτές οι τιμές αντιπροσωπεύουν επίσης το αρχικό μέγεθος του widget σας, οπότε αν το widget σας δεν μπορεί να αλλάξει μέγεθος, τότε το minHeight και το minWidth θα καθορίσουν το μόνιμο μέγεθος widget.

6. android: updatePeriodMillis

Το AppWidgetProviderInfo είναι επίσης όπου θα καθορίσετε πόσο συχνά το γραφικό στοιχείο σας θα πρέπει να ζητήσει νέες πληροφορίες.

Το μικρότερο διάστημα ενημέρωσης που υποστηρίζεται είναι μία φορά κάθε 1800000 χιλιοστά του δευτερολέπτου (30 λεπτά). Ακόμα κι αν δηλώσετε ένα μικρότερο χρονικό διάστημα ενημέρωσης, το γραφικό στοιχείο σας θα ενημερώνεται μόνο μία φορά κάθε μισή ώρα.

Παρόλο που ίσως θέλετε να εμφανίσετε τις πιο πρόσφατες πληροφορίες το συντομότερο δυνατό, το σύστημα θα ξυπνήστε μια συσκευή ύπνου για να ανακτήσετε νέες πληροφορίες. Οι συχνές ενημερώσεις μπορούν να καούν μέσα από τη μπαταρία μιας συσκευής, ιδιαίτερα σε περιόδους όπου η συσκευή είναι αδρανής για σημαντικό χρονικό διάστημα, όπως για μια μέρα στην άλλη. Η παροχή της καλύτερης δυνατής εμπειρίας χρήστη σημαίνει επίτευξη ισορροπίας μεταξύ του περιορισμού της κατανάλωσης της μπαταρίας και της παροχής νέων πληροφοριών εντός εύλογου χρονικού πλαισίου.

Θα πρέπει επίσης να λάβετε υπόψη το είδος του περιεχομένου που θα εμφανίζεται στο γραφικό σας στοιχείο.

Θα πρέπει επίσης να λάβετε υπόψη το είδος του περιεχομένου που θα εμφανίζονται τα widget σας για το Android. Για παράδειγμα, ένα γραφικό στοιχείο καιρού μπορεί να χρειάζεται μόνο να ανακτήσει μια ενημερωμένη πρόβλεψη μία φορά την ημέρα, ενώ μια εφαρμογή που εμφανίζει σπάνιες ειδήσεις θα πρέπει να ενημερώνεται πιο συχνά.

Για να βρείτε αυτήν την τέλεια ισορροπία, ίσως χρειαστεί να δοκιμάσετε το γραφικό στοιχείο σας σε μια σειρά συχνοτήτων ενημέρωσης και να μετρήσετε τις επιπτώσεις στη διάρκεια ζωής της μπαταρίας και την έγκαιρη ενημέρωση του περιεχομένου του widget σας. Εάν διαθέτετε μια πρόθυμη ομάδα δοκιμαστών, τότε θα μπορούσατε να ρυθμίσετε τις δοκιμές A / B, για να δείτε αν ορισμένες συχνότητες ανανέωσης λαμβάνουν περισσότερο θετική από άλλες.

Διαβάστε επίσης: AndroidManifest.xml όλα όσα πρέπει να γνωρίζετε

Τέλος, μόλις εντοπίσετε το τέλειο διάστημα ενημέρωσης, ίσως θέλετε να χρησιμοποιήσετε μικρότερο διάστημα κατά την ανάπτυξη και τη δοκιμή της εφαρμογής σας. Για παράδειγμα, θα μπορούσατε να χρησιμοποιήσετε τη συντομότερη συχνότητα ενημέρωσης (android: updatePeriodMillis = "1800000") όταν δοκιμάζετε τη σωστή ενεργοποίηση της μεθόδου onUpdate () της εφαρμογής σας και, στη συνέχεια, αλλάξτε αυτήν την τιμή πριν από την απελευθέρωση της εφαρμογής σας στο ευρύ κοινό.

Το ολοκληρωμένο AppWidgetProviderInfo

Το τελικό αρχείο collection_widget_info.xml θα πρέπει να φαίνεται ως εξής:

Μην γεμίζετε την αρχική οθόνη του χρήστη!

Για να βεβαιωθείτε ότι η αρχική οθόνη δεν φαίνεται ποτέ γεμάτη, θα προσθέσουμε κάποια προσθήκη και περιθώρια στο widget μας. Εάν το έργο σας δεν περιέχει ήδη ένα αρχείο dimens.xml, τότε θα πρέπει να δημιουργήσετε ένα:

  • Κάντε κλικ στο Control-κλικ στο φάκελο τιμών του έργου σας.
  • Επιλέξτε Νέο> Αρχείο πόρου τιμών.
  • Δώστε στο αρχείο αυτό το μέγεθος του ονόματος.
  • Κάντε κλικ στο κουμπί OK.

Ανοίξτε το αρχείο dimens.xml και ορίστε τις ακόλουθες τιμές περιθωρίου και παρεμβολής:

10dp 8dp

Αποστολή δεδομένων στο γραφικό στοιχείο

Στη συνέχεια, πρέπει να δημιουργήσουμε μια υπηρεσία widget, η οποία θα είναι υπεύθυνη για την αποστολή των δεδομένων συλλογής στο widget.

Δημιουργήστε μια νέα κλάση Java (Νέα> Κατηγορία Java) που ονομάζεται WidgetService και προσθέστε τα εξής:

εισαγωγή καιroid.content.Intent; εισαγωγή καιroid.widget.RemoteViewsService; η δημόσια τάξη WidgetService επεκτείνει το RemoteViewsService {@Override δημόσιο RemoteViewsFactory onGetViewFactory (πρόθεση πρόθεση) {επιστρέψει νέα DataProvider (αυτό, πρόθεση)? }}

Καταχωρίζοντας το γραφικό σας στοιχείο στο Manifest

Τώρα πρέπει να κάνουμε κάποιες αλλαγές στο Manifest του έργου μας.

Για να ξεκινήσετε, ανοίξτε το Manifest και καταχωρίστε το widget σας ως BroadcastReceiver. Επίσης, πρέπει να προσθέσουμε ένα φίλτρο προθέσεως για τη δράση android.appwidget.action.APPWIDGET_UPDATE:

Στη συνέχεια, πρέπει να καθορίσετε τον παροχέα widget εφαρμογής:

Τέλος, πρέπει να δηλώσουμε την υπηρεσία που θα στείλει δεδομένα στο γραφικό στοιχείο μας, το οποίο στην περίπτωση αυτή είναι η κλάση WidgetService. Αυτή η υπηρεσία απαιτεί το δικαίωμα forroid.permission.BIND_REMOTEVIEWS:

Βάλτε το widget σας στη δοκιμή

Εάν παρακολουθήσατε μαζί με αυτό το σεμινάριο, τότε θα έχετε ένα πλήρες widget συλλογής που θα εμφανίζει ένα σύνολο δεδομένων στην αρχική οθόνη του χρήστη.

Εάν αυτό ήταν ένα πραγματικό έργο Android, τότε συνήθως επεκτείνετε τις μεθόδους του κύκλου ζωής, ιδιαίτερα τη μέθοδο onUpdate (), αλλά αυτό είναι όλο που χρειαζόμαστε για να δημιουργήσετε ένα widget που μπορείτε να εγκαταστήσετε και να δοκιμάσετε στη συσκευή σας Android:

  • Εγκαταστήστε αυτό το έργο σε συμβατό Android smartphone, tablet ή AVD (Android Virtual Device).
  • Πατήστε παρατεταμένα οποιοδήποτε κενό τμήμα της αρχικής οθόνης και επιλέξτε Widgets όταν σας ζητηθεί. αυτό ξεκινά το Widget Picker.
  • Περάστε από το Widget Picker μέχρι να βρείτε το widget της εφαρμογής που μόλις δημιουργήσατε.
  • Πατήστε παρατεταμένα αυτό το γραφικό στοιχείο για να το προσθέσετε στην αρχική οθόνη σας.
  • Δεδομένου ότι πρόκειται για την πρώτη εμφάνιση αυτού του συγκεκριμένου γραφικού στοιχείου, θα πρέπει να εκτελεστεί η μέθοδος onEnabled () και θα δείτε ένα τοστ "onEnabled called".
  • Αλλαγή μεγέθους του widget σας. Εάν ορίσετε ένα ελάχιστο υποστηριζόμενο μέγεθος, ελέγξτε ότι δεν μπορείτε να συρρικνώσετε το γραφικό στοιχείο πέρα ​​από αυτήν την τιμή.
  • Ελέγξτε ότι το ListView πραγματοποιεί κύλιση, όπως αναμένεται.
  • Στη συνέχεια, πρέπει να ελέγξετε τη μέθοδο onDisabled (), διαγράφοντας το γραφικό σας στοιχείο. Πατήστε παρατεταμένα το γραφικό στοιχείο και, στη συνέχεια, επιλέξτε Κατάργηση από την Αρχική οθόνη. Δεδομένου ότι πρόκειται για την τελευταία εμφάνιση αυτού του συγκεκριμένου γραφικού στοιχείου, θα πρέπει να εκτελεστεί η μέθοδος onDisabled () και θα δείτε ένα τοστιέρα "onDisabled called".

Αυτό είναι το μόνο που χρειάζεστε για να παραδώσετε ένα λειτουργικό widget εφαρμογής Android, αλλά υπάρχουν μερικές προσθήκες που συχνά βελτιώνουν την εμπειρία του χρήστη. Στις επόμενες ενότητες, θα ενθαρρύνουμε τους χρήστες να επιλέξουν αυτό το widget από τον Widget Picker, δημιουργώντας μια εικόνα προεπισκόπησης που παρουσιάζει το widget με τον καλύτερο δυνατό τρόπο. Θα σας δείξω επίσης πώς να δημιουργήσετε ένα πλήρως προσαρμόσιμο widget, προσθέτοντας μια δραστηριότητα διαμόρφωσης στο έργο σας.

Δημιουργία εικόνας προεπισκόπησης widget Android

Εάν τραβήξετε τη συσκευή σας Android και σύρετε μέσα από το Widget Picker, θα δείτε ότι κάθε γραφικό στοιχείο αντιπροσωπεύεται από μια εικόνα, η οποία συνήθως δείχνει πώς θα εμφανιστεί αυτό το γραφικό στοιχείο μόλις ρυθμιστεί στην αρχική οθόνη του χρήστη.

Για να ενθαρρύνετε τους χρήστες να επιλέξουν το γραφικό σας στοιχείο, θα πρέπει να δώσετε μια εικόνα προεπισκόπησης που θα επισημαίνει όλες τις χρήσιμες πληροφορίες και δυνατότητες που μπορεί να προσφέρει το γραφικό σας στοιχείο.

Μπορείτε να δημιουργήσετε γρήγορα και εύκολα μια εικόνα προεπισκόπησης, χρησιμοποιώντας την εφαρμογή Preview Widget που περιλαμβάνεται στον εξομοιωτή Android.

Σημειώστε ότι η προεπισκόπηση Widget δεν περιλαμβάνεται στις πιο πρόσφατες εικόνες του συστήματος Android, επομένως θα χρειαστεί να δημιουργήσετε ένα AVD χρησιμοποιώντας το Nougat (API Level 25) ή παλιότερα:

  • Εγκαταστήστε την εφαρμογή σας σε ένα AVD που εκτελεί API 25 ή χαμηλότερο.
  • Ανοίξτε το συρτάρι της εφαρμογής AVD και ξεκινήστε την εφαρμογή Προεπισκόπηση γραφικού στοιχείου.
  • Η προεπισκόπηση widget θα εμφανίσει μια λίστα με όλες τις εφαρμογές που είναι εγκατεστημένες αυτήν τη στιγμή σε αυτό το AVD. επιλέξτε την αίτησή σας από τη λίστα.

  • Το γραφικό σας στοιχείο θα εμφανιστεί τώρα σε κενό φόντο. Περάστε λίγο χρόνο αλλάζοντας το μέγεθος και τροποποιώντας το widget σας μέχρι να δείξει το καλύτερο που έχει το widget σας.
  • Μόλις είστε ικανοποιημένοι με την εμφάνιση και το περιεχόμενο του widget σας, επιλέξτε Λήψη στιγμιότυπου.

  • Για να ανακτήσετε το στιγμιότυπο σας, γυρίστε ξανά στο Android Studio και επιλέξτε Προβολή> Εργαλεία Windows> Εξερεύνηση αρχείων συσκευής από τη γραμμή εργαλείων. Αυτό ξεκινά τον εξερευνητή αρχείων συσκευής Android Studio.
  • Στην Εξερεύνηση αρχείων συσκευής, μεταβείτε στην επιλογή sdcard / Download. Θα πρέπει να βρείτε την εικόνα προεπισκόπησης που έχετε αποθηκεύσει με την ακόλουθη μορφή: _ori_.png

  • Μεταφέρετε αυτήν την εικόνα από το Android Studio και ρίξτε την κάπου εύκολα προσβάσιμη, όπως η επιφάνεια εργασίας σας.
  • Δώστε σε αυτό το αρχείο εικόνας ένα περιγραφικό όνομα.
  • Μεταφέρετε και αποθέστε το αρχείο στον ανασυρόμενο φάκελο του έργου σας.
  • Ανοίξτε το AppWidgetProviderInfo, το οποίο για το έργο αυτό είναι collection_widget_info.xml.
  • Βρείτε τη γραμμή android: previewImage = "@ mipmap / ic_launcher" και ενημερώστε την για να ανατρέξετε στην εικόνα προεπισκόπησης.

Το γραφικό στοιχείο σας θα χρησιμοποιήσει τώρα αυτήν τη νέα πηγή εικόνας ως εικόνα προεπισκόπησης:

  • Εγκαταστήστε το ενημερωμένο έργο στη φυσική σας συσκευή Android ή στο AVD.
  • Πατήστε παρατεταμένα οποιοδήποτε κενό τμήμα της αρχικής οθόνης.
  • Πατήστε Widgets, το οποίο ξεκινά τον επιλογέα του Widget.
  • Μεταβείτε στο γραφικό σας στοιχείο. θα πρέπει τώρα να χρησιμοποιεί την ενημερωμένη εικόνα προεπισκόπησης.

Προσαρμοσμένα widgets: Προσθήκη μιας διαμόρφωσης Δραστηριότητα

Μια διαμόρφωση Δραστηριότητα εκκινείται αυτόματα όταν ο χρήστης τοποθετεί κάθε εμφάνιση του widget σας στην αρχική τους οθόνη.

Υπάρχουν διάφοροι λόγοι για τους οποίους ίσως θελήσετε να προσθέσετε μια δραστηριότητα διαμόρφωσης στο έργο σας.

τα widgets τείνουν να παρέχουν την καλύτερη εμπειρία χρήστη όταν παρέχουν πρόσβαση στις πληροφορίες ή τις λειτουργίες που είναι πιο σημαντικές για τον κάθε χρήστη.

Πρώτον, ορισμένα widgets απαιτούν αρχική ρύθμιση, για παράδειγμα ένα γραφικό στοιχείο που εμφανίζει ειδοποιήσεις κυκλοφορίας ίσως χρειαστεί να γνωρίζει τη διεύθυνση κατοικίας του χρήστη, όπου εργάζεται και τις ώρες που συνήθως μετακινούνται. Χωρίς κάποιον τρόπο να εισαγάγετε αυτές τις πληροφορίες, το γραφικό στοιχείο σας μπορεί να είναι εντελώς άχρηστο!

Επιπλέον, τα γραφικά στοιχεία τείνουν να παρέχουν την καλύτερη εμπειρία χρήστη όταν παρέχουν πρόσβαση στις πληροφορίες ή τις λειτουργίες που είναι πιο σημαντικές για τον κάθε χρήστη. Προσθέτοντας μια δραστηριότητα διαμόρφωσης στο έργο σας, μπορείτε να δώσετε στους χρήστες την ελευθερία επιλογής και επιλογής ακριβώς τι περιλαμβάνεται στο γραφικό σας στοιχείο.

Ακόμα και σχετικά απλές προσαρμογές, όπως αλλαγή φόντου ή γραμματοσειράς ενός widget, μπορούν να έχουν θετικό αντίκτυπο στην εμπειρία του χρήστη - άλλωστε, κανείς δεν πρόκειται να εκτιμήσει ένα γραφικό στοιχείο που συγκρούεται οπτικά με την υπόλοιπη αρχική οθόνη τους!

Κανείς δεν πρόκειται να εκτιμήσει ένα widget που συγκρούεται οπτικά με την υπόλοιπη αρχική οθόνη τους!

Εναλλακτικά, μερικές φορές μπορεί να έχετε μια μακρά λίστα περιεχομένων που θέλετε να συμπεριλάβετε στο γραφικό σας στοιχείο και δυσκολεύεστε να περιορίσετε τις επιλογές σας. Μια διαμόρφωση Δραστηριότητα μπορεί να είναι ένας τρόπος να θέσει όλες τις ιδέες σας σε καλή χρήση, χωρίς δημιουργώντας ένα γεμάτο, συγχέοντας widget. Ακριβώς λάβετε υπόψη ότι η ρύθμιση ενός widget δεν θα πρέπει να αισθάνεται σαν μια δουλειά, οπότε αν παρέχετε μια διαμόρφωση Δραστηριότητα τότε συνιστάται να περιορίσετε τον εαυτό σας σε τρεις επιλογές διαμόρφωσης.

Ας προσθέσουμε μια δραστηριότητα διαμόρφωσης στο έργο μας!

Πρώτον, η διαμόρφωσή μας Δραστηριότητα χρειάζεται μια διάταξη, οπότε δημιουργήστε ένα νέο αρχείο πόρων διαμόρφωσης με το όνομα config_activity.xml.

Θα προσθέσω τα ακόλουθα κουμπιά σε αυτή τη διάταξη:

  • Ένα κουμπί διαμόρφωσης. Σε ένα έργο πραγματικής ζωής, αυτό το κουμπί θα τροποποιήσει το γραφικό στοιχείο με κάποιο τρόπο, για παράδειγμα την προσθήκη ή την αφαίρεση περιεχομένου ή την αλλαγή της συχνότητας επικαιροποίησης του widget. Για να διατηρήσετε τον κωδικό σας απλό, κάνοντας κλικ σε αυτό το κουμπί, θα εμφανιστεί απλά μια επιλογή τοστ διαμόρφωσης.
  • Ένα κουμπί ρύθμισης. Μόλις ο χρήστης είναι ευχαριστημένος με τον τρόπο με τον οποίο έχει ρυθμιστεί το widget του, πατώντας αυτό το κουμπί θα τοποθετηθεί το νεοεισαγόμενο widget στην αρχική του οθόνη.

Εδώ είναι το ολοκληρωμένο αρχείο config_activity.xml μου:

Δημιουργήστε τη Δραστηριότητα Διαμόρφωσης

Τώρα, πρέπει να δημιουργήσουμε τη Δραστηριότητά μας διαμόρφωσης.

Για να ξεκινήσετε, δημιουργήστε μια νέα κλάση Java που ονομάζεται ConfigActivity. Σε αυτήν τη Δραστηριότητα, θα ανακτήσουμε το αναγνωριστικό του Widget App από την πρόθεση που ξεκίνησε τη Δραστηριότητα διαμόρφωσης. Εάν αυτή η πρόθεση δεν έχει αναγνωριστικό widget, τότε θα χρειαστεί να καλέσουμε τη μέθοδο finish ():

Πρόθεση πρόθεσης = getIntent (); Πακέτα πρόσθετα = intent.getExtras (); εάν (επιπλέον! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); αν (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish (); }}

Στη συνέχεια, πρέπει να δημιουργήσουμε μια πρόθεση επιστροφής, να περάσουμε το αρχικό appWidgetId και να ορίσουμε τα αποτελέσματα από τη διαμόρφωση Δραστηριότητα:

Intent resultValue = νέα πρόθεση (); αποτέλεσμαValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, αποτέλεσμαValue); φινίρισμα(); }}}

Αν παρέχετε μια Δραστηριότητα διαμόρφωσης, τότε η εκπομπή ACTION_APPWIDGET_UPDATE δεν θα αποσταλεί αυτόματα όταν ξεκινήσει η Δραστηριότητα Διαμόρφωσης, δηλαδή η μέθοδος onUpdate () συνηθισμένος να καλείται όταν ο χρήστης δημιουργεί μια παρουσία του γραφικού σας στοιχείου.

Για να διασφαλίσετε ότι το γραφικό στοιχείο σας δημιουργείται με ενημερωμένες πληροφορίες και περιεχόμενο, τη Δραστηριότητα ρύθμισης παραμέτρων πρέπει ενεργοποίηση του πρώτου αιτήματος κατά την ενημέρωση ().

Εδώ είναι το ολοκληρωμένο ConfigActivity:

εισαγωγή καιroid.app.Activity; εισαγωγή καιroid.appwidget.AppWidgetManager; εισαγωγή android.os.Bundle; εισαγωγή καιroid.widget.Button; εισαγωγή καιroid.content.Intent; εισαγωγή android.view.View; εισαγωγή καιroid.view.View.OnClickListener; εισαγωγή καιroid.widget.Toast; η δημόσια τάξη ConfigActivity επεκτείνει τη Δραστηριότητα {@Override protected void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.config_activity); setResult (RESULT_CANCELED); Κουμπί setupWidget = (Κουμπί) findViewById (R.id.setupWidget); setupWidget.setOnClickListener (νέο OnClickListener () {@Override public void onClick (Προβολή v) {handleSetupWidget ();}})? Κουμπί configButton = (Κουμπί) findViewById (R.id.configButton); configButton.setOnClickListener (νέο OnClickListener () {@Override public void onClick (Προβολή v) {handleConfigWidget ();}}); } ιδιωτική void handleSetupWidget () {showAppWidget (); } ιδιωτικό void handleConfigWidget () {Toast.makeText (ConfigActivity.this, "Επιλογές διαμόρφωσης", Toast.LENGTH_LONG) .show (); } int appWidgetId; ιδιωτική άκυρη εμφάνισηAppWidget () {appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; Πρόθεση πρόθεσης = getIntent (); Πακέτα πρόσθετα = intent.getExtras (); εάν (επιπλέον! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); αν (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish (); } // TO DO: Εκτελέστε τη διαμόρφωση // Intent resultValue = new Intent (); αποτέλεσμαValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, αποτέλεσμαValue); φινίρισμα(); }}}

Μόλις δημιουργήσετε μια Δραστηριότητα ρύθμισης παραμέτρων, θα πρέπει να δηλώσετε αυτήν τη Δραστηριότητα στο Manifest και να ορίσετε ότι δέχεται την ενέργεια APPWIDGET_CONFIGURE:

Τέλος, δεδομένου ότι μια δραστηριότητα διαμόρφωσης αναφέρεται εκτός του πεδίου εφαρμογής του πακέτου, πρέπει να δηλώσουμε αυτήν τη δραστηριότητα στο AppWidgetProviderInfo, το οποίο στην περίπτωση αυτή είναι το αρχείο collection_widget_info.xml:

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

Δοκιμάστε το έργο σας

Τώρα ήρθε η ώρα να βάλετε το τελικό έργο σας στη δοκιμή:

  • Εγκαταστήστε το ενημερωμένο έργο σας σε μια φυσική συσκευή Android ή AVD.
  • Διαγράψτε όλες τις προηγούμενες εμφανίσεις του γραφικού σας στοιχείου, για να βεβαιωθείτε ότι εργάζεστε με την πιο πρόσφατη έκδοση.
  • Πιέστε παρατεταμένα οποιαδήποτε κενή περιοχή της αρχικής οθόνης και επιλέξτε Widgets όταν σας ζητηθεί.
  • Βρείτε το widget σας στο Widget Picker και πατήστε παρατεταμένα για να το επιλέξετε.
  • Καταργήστε το γραφικό στοιχείο στην αρχική οθόνη σας. Η δραστηριότητα διαμόρφωσης πρέπει να ξεκινήσει αυτόματα.
  • Δώστε ένα κλικ στο κουμπί Εκτέλεση ορισμένης ρύθμισης παραμέτρων και θα πρέπει να εμφανιστεί ένα τοστ διαμόρφωσης, επιβεβαιώνοντας ότι αυτή η αλληλεπίδραση έχει καταχωριστεί με επιτυχία.
  • Φανταστείτε ότι έχετε τροποποιήσει τις ρυθμίσεις του widget και είστε έτοιμοι να το τοποθετήσετε στην αρχική οθόνη σας. δώστε στο κουμπί Δημιουργία του Widget ένα πάτημα και αυτό το widget θα πρέπει να δημιουργηθεί με επιτυχία.

Μπορείτε να κατεβάσετε το ολοκληρωμένο έργο widget συλλογής από το GitHub.

Τυλίγοντας

Σε αυτό το άρθρο, δημιουργήσαμε ένα widget συλλογής με δυνατότητα κύλισης που εμφανίζει ένα σύνολο δεδομένων στην αρχική οθόνη του χρήστη.

Εάν θέλετε να συνεχίσετε να εργάζεστε με αυτό το έργο, τότε μπορείτε να δοκιμάσετε να προσθέσετε τον δικό σας κώδικα στη μέθοδο onUpdate (), για να δημιουργήσετε ένα widget που ενημερώνεται με νέες πληροφορίες στο διάστημα που ορίζεται στο αρχείο AppWidgetProviderInfo (collection_widget_info).

Εάν δημιουργήσετε ένα γραφικό στοιχείο Android, φροντίστε να μοιραστείτε τις δημιουργίες σας στα παρακάτω σχόλια!

Σε μια νέα συνέντευξη μεBloomberg, Ο συνιδρυτής της Apple, teve Wozniak, συζητά όλους τους τρόπους τεχνολογίας, συμπεριλαμβανομένης της κρυπτογράφησης, της AI, της μηχανικής μάθησης και των ηλεκτρικών...

Εάν έχετε έναν φίλο που είναι διευθυντής έργου, ίσως να είστε περίεργος τι είναι αυτό που πραγματικά κάνουν όλη μέρα. Ίσως να αναρωτιέστε γιατί πληρώνονται τόσο πολύ για να το κάνει....

Δημοφιλής