portaldacalheta.pt
  • Κύριος
  • Το Μέλλον Της Εργασίας
  • Πίσω Μέρος
  • Ζωή Σχεδιαστών
  • Διαχείριση Έργου
Κινητό

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



Δεν είναι ασυνήθιστο για τους προγραμματιστές να βρίσκονται σε ανάγκη ενός ΚΡΕΜΜΥΔΙ στοιχείο που είτε δεν παρέχεται από την πλατφόρμα που στοχεύουν ή, πράγματι, παρέχεται, αλλά στερείται συγκεκριμένης ιδιότητας ή συμπεριφοράς. Η απάντηση και στα δύο σενάρια είναι ένα προσαρμοσμένο στοιχείο διεπαφής χρήστη.

Το μοντέλο UI Android είναι εγγενώς προσαρμόσιμο, προσφέροντας τα μέσα Προσαρμογή Android , δοκιμές , και την ικανότητα δημιουργίας προσαρμοσμένα στοιχεία διεπαφής χρήστη με διάφορους τρόπους:



  • Κληρονομήστε ένα υπάρχον στοιχείο (δηλ. TextView, ImageView κ.λπ.) και προσθέστε / παρακάμψτε την απαιτούμενη λειτουργικότητα. Για παράδειγμα, a CircleImageView που κληρονομεί ImageView, παρακάμπτοντας το onDraw() λειτουργία για να περιορίσετε την εμφανιζόμενη εικόνα σε κύκλο και προσθέτοντας ένα loadFromFile() λειτουργία για να φορτώσετε μια εικόνα από εξωτερική μνήμη.



  • Δημιουργήστε ένα σύνθετο στοιχείο από πολλά στοιχεία. Αυτή η προσέγγιση συνήθως εκμεταλλεύεται Διατάξεις για τον έλεγχο της διάταξης των εξαρτημάτων στην οθόνη. Για παράδειγμα, a LabeledEditText που κληρονομεί LinearLayout με οριζόντιο προσανατολισμό και περιέχει και τα δύο | TextView ενεργεί ως ετικέτα και ως EditText ενεργεί ως πεδίο εισαγωγής κειμένου.



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

  • Η πιο ευέλικτη και πιο περίπλοκη προσέγγιση είναι δημιουργήστε ένα αυτοσχέδιο στοιχείο . Σε αυτήν την περίπτωση, το στοιχείο θα κληρονομήσει το γενικό View συναρτήσεις τάξης και παράκαμψης όπως onMeasure() για να καθορίσετε τη διάταξή του, onDraw() για την εμφάνιση των περιεχομένων του, κ.λπ. Τα στοιχεία που δημιουργούνται με αυτόν τον τρόπο συνήθως εξαρτώνται σε μεγάλο βαθμό από τα Android 2D API σχεδίασης .



Μελέτη περίπτωσης προσαρμογής Android: Η CalendarView

Το Android παρέχει εγγενή CalendarView συστατικό . Λειτουργεί καλά και παρέχει την ελάχιστη αναμενόμενη λειτουργικότητα από οποιοδήποτε στοιχείο ημερολογίου, εμφανίζοντας έναν ολόκληρο μήνα και επισημαίνοντας την τρέχουσα ημέρα. Κάποιοι μπορεί να λένε ότι φαίνεται επίσης καλό, αλλά μόνο αν ψάχνετε για μια εγγενή εμφάνιση και δεν ενδιαφέρεστε να προσαρμόσετε τον τρόπο εμφάνισής του.

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



Στιγμιότυπο οθόνης CalendarView σε AppCompact.Light θέμα.

Κάνε το δικό σου

Λοιπόν, πώς μπορεί κανείς να δημιουργήσει τη δική του προβολή ημερολογίου; Οποιαδήποτε από τις παραπάνω προσεγγίσεις θα λειτουργούσε. Ωστόσο, η πρακτικότητα συνήθως αποκλείει την τρίτη επιλογή (γραφικά 2D) και μας αφήνει με τις δύο άλλες μεθόδους και θα χρησιμοποιήσουμε ένα μείγμα και των δύο σε αυτό το άρθρο.



Για να ακολουθήσετε, μπορείτε να βρείτε τον πηγαίο κώδικα εδώ .

1. Η διάταξη των στοιχείων

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



Στιγμιότυπο οθόνης Προσαρμοσμένη προβολή ημερολογίου.

Αυτή η διάταξη ορίζεται στο αρχείο control_calendar.xml, ως εξής. Λάβετε υπόψη ότι κάποια επαναλαμβανόμενη σήμανση συντομεύτηκε με ...:



τι είναι ένα αρχείο bootstrap
... Repeat for MON - SAT.

2. Η κλάση συστατικών

Η προηγούμενη διάταξη μπορεί να συμπεριληφθεί ως έχει σε ένα Activity ή a Fragment και θα λειτουργήσει καλά. Ωστόσο, η ενσωμάτωσή του ως αυτόνομο στοιχείο UI θα αποτρέψει την επανάληψη κώδικα και θα επιτρέψει μια αρθρωτή σχεδίαση, όπου κάθε ενότητα χειρίζεται μία ευθύνη.

Το στοιχείο διεπαφής χρήστη θα είναι ένα LinearLayout, ώστε να ταιριάζει με τη ρίζα του αρχείου διάταξης XML. Σημειώστε ότι εμφανίζονται μόνο τα σημαντικά μέρη από τον κώδικα. Η υλοποίηση του στοιχείου βρίσκεται στο CalendarView.java:

public class CalendarView extends LinearLayout { // internal components private LinearLayout header; private ImageView btnPrev; private ImageView btnNext; private TextView txtDate; private GridView grid; public CalendarView(Context context) { super(context); initControl(context); } /** * Load component XML layout */ private void initControl(Context context) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.control_calendar, this); // layout is inflated, assign local variables to components header = (LinearLayout)findViewById(R.id.calendar_header); btnPrev = (ImageView)findViewById(R.id.calendar_prev_button); btnNext = (ImageView)findViewById(R.id.calendar_next_button); txtDate = (TextView)findViewById(R.id.calendar_date_display); grid = (GridView)findViewById(R.id.calendar_grid); } }

Ο κωδικός είναι αρκετά απλός. Κατά τη δημιουργία, το στοιχείο διογκώνει τη διάταξη XML και όταν ολοκληρωθεί, εκχωρεί τα εσωτερικά στοιχεία ελέγχου σε τοπικές μεταβλητές για ευκολότερη πρόσβαση αργότερα.

3. Απαιτείται κάποια λογική

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

  1. Η προβολή ημερολογίου έχει πλάτος επτά ημερών και είναι εγγυημένο ότι όλοι οι μήνες θα ξεκινήσουν κάπου στην πρώτη σειρά.

  2. Πρώτον, πρέπει να καταλάβουμε σε ποια θέση ξεκινά ο μήνας και, στη συνέχεια, να συμπληρώσουμε όλες τις θέσεις πριν από αυτό με τους αριθμούς από τον προηγούμενο μήνα (30, 29, 28 .. κ.λπ.) μέχρι να φτάσουμε στη θέση 0.

  3. Στη συνέχεια, συμπληρώνουμε τις ημέρες για τον τρέχοντα μήνα (1, 2, 3… κ.λπ.).

  4. Μετά από αυτό έρχονται οι μέρες για τον επόμενο μήνα (πάλι, 1, 2, 3 .. κ.λπ.), αλλά αυτή τη φορά συμπληρώνουμε μόνο τις υπόλοιπες θέσεις στην τελευταία σειρά του πλέγματος.

Το παρακάτω διάγραμμα απεικονίζει αυτά τα βήματα:

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

πραγματικό κόστος μιας αριθμομηχανής υπολογιστικών φύλλων εργαζομένων

Το πλάτος του πλέγματος έχει ήδη καθοριστεί ως επτά κελιά, δηλώνει ένα εβδομαδιαίο ημερολόγιο, αλλά τι γίνεται με το ύψος; Το μεγαλύτερο μέγεθος για το πλέγμα μπορεί να προσδιοριστεί από το χειρότερο σενάριο ενός μήνα 31 ημερών που ξεκινά από το Σάββατο, το οποίο είναι το τελευταίο κελί στην πρώτη σειρά και θα χρειαστούν 5 ακόμη σειρές για πλήρη εμφάνιση. Επομένως, η ρύθμιση του ημερολογίου για εμφάνιση έξι σειρών (συνολικά 42 ημέρες) θα είναι αρκετή για τον χειρισμό όλων των περιπτώσεων.

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

Όπως αναφέρθηκε προηγουμένως, οι λειτουργίες ημερομηνίας που παρέχονται από το Calendar τάξη κάνει την εφαρμογή αρκετά απλή. Στο συστατικό μας, το updateCalendar() Η συνάρτηση υλοποιεί αυτήν τη λογική:

private void updateCalendar() { ArrayList cells = new ArrayList(); Calendar calendar = (Calendar)currentDate.clone(); // determine the cell for current month's beginning calendar.set(Calendar.DAY_OF_MONTH, 1); int monthBeginningCell = calendar.get(Calendar.DAY_OF_WEEK) - 1; // move calendar backwards to the beginning of the week calendar.add(Calendar.DAY_OF_MONTH, -monthBeginningCell); // fill cells (42 days calendar as per our business logic) while (cells.size()

4. Προσαρμόσιμο στο Heart

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

Για αυτό το παράδειγμα, θα απαιτήσουμε τα ακόλουθα από το Adapter

  • Η σημερινή ημέρα πρέπει να είναι μέσαέντονο μπλε κείμενο.
  • Οι ημέρες εκτός του τρέχοντος μήνα πρέπει να είναιγκρίζα.
  • Οι ημέρες με μια εκδήλωση πρέπει να εμφανίζουν ένα ειδικό εικονίδιο.
  • Η κεφαλίδα του ημερολογίου πρέπει να αλλάζει χρώματα ανάλογα με την εποχή (Καλοκαίρι, Φθινόπωρο, Χειμώνας, Άνοιξη).

Οι τρεις πρώτες απαιτήσεις μπορούν να επιτευχθούν απλώς αλλάζοντας τα χαρακτηριστικά κειμένου και τους πόρους του φόντου. Ας εφαρμόσουμε ένα CalendearView για την εκτέλεση αυτού του καθήκοντος. Είναι αρκετά απλό ώστε να μπορεί να είναι μέλος τάξης στο CalendarAdapter. Παρακάμπτοντας το CalendarView λειτουργία, μπορούμε να επιτύχουμε τις παραπάνω απαιτήσεις:

getView()

Η τελική απαίτηση σχεδιασμού απαιτεί λίγο περισσότερη δουλειά. Αρχικά, ας προσθέσουμε τα χρώματα για τις τέσσερις σεζόν σε @Override public View getView(int position, View view, ViewGroup parent) { // day in question Date date = getItem(position); // today Date today = new Date(); // inflate item if it does not exist yet if (view == null) view = inflater.inflate(R.layout.control_calendar_day, parent, false); // if this day has an event, specify event image view.setBackgroundResource(eventDays.contains(date)) ? R.drawable.reminder : 0); // clear styling view.setTypeface(null, Typeface.NORMAL); view.setTextColor(Color.BLACK); if (date.getMonth() != today.getMonth() || date.getYear() != today.getYear()) { // if this day is outside current month, grey it out view.setTextColor(getResources().getColor(R.color.greyed_out)); } else if (date.getDate() == today.getDate()) { // if it is today, set it to blue/bold view.setTypeface(null, Typeface.BOLD); view.setTextColor(getResources().getColor(R.color.today)); } // set text view.setText(String.valueOf(date.getDate())); return view; } :

/res/values/colors.xml

Στη συνέχεια, ας χρησιμοποιήσουμε έναν πίνακα για να καθορίσουμε την σεζόν για κάθε μήνα (υποθέτοντας ότι το βόρειο ημισφαίριο, για απλότητα, συγγνώμη Αυστραλία!). Σε #44eebd82 #44d8d27e #44a1c1da #448da64b προσθέτουμε τις ακόλουθες μεταβλητές μελών:

CalendarView

Με αυτόν τον τρόπο, επιλέγοντας ένα κατάλληλο χρώμα γίνεται επιλέγοντας την κατάλληλη σεζόν (// seasons' rainbow int[] rainbow = new int[] { R.color.summer, R.color.fall, R.color.winter, R.color.spring }; int[] monthSeason = new int[] {2, 2, 3, 3, 3, 0, 0, 0, 1, 1, 1, 2}; ) και στη συνέχεια επιλέγοντας το αντίστοιχο χρώμα (monthSeason[currentMonth]), αυτό προστίθεται στο rainbow[monthSeason[currentMonth] για να βεβαιωθείτε ότι έχει επιλεγεί το κατάλληλο χρώμα κάθε φορά που αλλάζει το ημερολόγιο.

updateCalendar()

Με αυτό, έχουμε το ακόλουθο αποτέλεσμα:

Προσαρμογή Android Το χρώμα της κεφαλίδας αλλάζει ανάλογα με την εποχή.

Σημαντική σημείωση λόγω του τρόπου // set header color according to current season int month = currentDate.get(Calendar.MONTH); int season = monthSeason[month]; int color = rainbow[season]; header.setBackgroundColor(getResources().getColor(color)); συγκρίνει αντικείμενα, ο παραπάνω έλεγχος HashSet σε eventDays.contains(date) δεν θα αποδώσει αληθές για αντικείμενα ημερομηνίας, εκτός εάν είναι ακριβώς ίδια. Δεν πραγματοποιεί ειδικούς ελέγχους για το updateCalendar() Τύπος δεδομένων. Για να επιλύσετε αυτό το ζήτημα, αυτός ο έλεγχος αντικαθίσταται από τον ακόλουθο κωδικό:

Date

5. Φαίνεται άσχημο στο χρόνο σχεδίασης

Η επιλογή του Android για τα σύμβολα κράτησης θέσης κατά το σχεδιασμό μπορεί να είναι αμφισβητήσιμη. Ευτυχώς, το Android στηρίζει πραγματικά το στοιχείο μας για να το καταστήσει στο σχεδιαστή διεπαφής χρήστη και μπορούμε να το εκμεταλλευτούμε καλώντας for (Date eventDate : eventDays) { if (eventDate.getDate() == date.getDate() && eventDate.getMonth() == date.getMonth() && eventDate.getYear() == date.getYear()) { // mark this day for event view.setBackgroundResource(R.drawable.reminder); break; } } στο κατασκευαστικό στοιχείο. Με αυτόν τον τρόπο το στοιχείο θα έχει νόημα στην ώρα του σχεδιασμού.

πώς να χρησιμοποιήσετε το junit στο intellij

Στιγμιότυπο οθόνης

Εάν η προετοιμασία του στοιχείου απαιτεί πολλή επεξεργασία ή φορτώνει πολλά δεδομένα, μπορεί να επηρεάσει την απόδοση του IDE. Σε αυτήν την περίπτωση, το Android παρέχει μια καλή λειτουργία που ονομάζεται updateCalendar() που μπορούν να χρησιμοποιηθούν για τον περιορισμό του όγκου των δεδομένων που χρησιμοποιούνται όταν το στοιχείο είναι πραγματικά τεκμηριωμένο στο σχεδιαστή διεπαφής χρήστη. Για παράδειγμα, εάν υπάρχουν πολλά συμβάντα που πρέπει να φορτωθούν στο isInEditMode(), μπορούμε να χρησιμοποιήσουμε CalendarView μέσα στο isInEditMode() Λειτουργεί για να παρέχει μια λίστα κενών / περιορισμένων συμβάντων σε λειτουργία σχεδίασης και να φορτώνει το πραγματικό.

6. Επικαλούμενη το συστατικό

Το στοιχείο μπορεί να συμπεριληφθεί σε αρχεία διάταξης XML (ένα δείγμα χρήσης βρίσκεται στο updateCalendar()):

activity_main.xml

Και ανακτήθηκε για αλληλεπίδραση με τη φόρτωση της διάταξης:

HashSet events = new HashSet(); events.add(new Date()); CalendarView cv = ((CalendarView)findViewById(R.id.calendar_view)); cv.updateCalendar(events);

Ο παραπάνω κώδικας δημιουργεί ένα HashSet συμβάντων, προσθέτει την τρέχουσα ημέρα σε αυτήν και μετά περνά σε CalendarView. Ως αποτέλεσμα, το CalendarView θα εμφανίσει την τρέχουσα ημέρα με έντονο μπλε χρώμα και θα βάλει επίσης το δείκτη συμβάντος σε αυτό:

Στιγμιότυπο οθόνης CalendarView εμφάνιση ενός συμβάντος

7. Προσθήκη χαρακτηριστικών

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

Για να γίνει αυτό, απαιτούνται τα ακόλουθα βήματα:

  • Δηλώστε το χαρακτηριστικό. Ας το ονομάσουμε dateFormat και δώστε το string Τύπος δεδομένων. Προσθήκη στο /res/values/attrs.xml:
'MMMM yyyy'
  • Χρησιμοποιήστε το χαρακτηριστικό στη διάταξη που χρησιμοποιεί το στοιχείο και δώστε του την τιμή TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.CalendarView); dateFormat = ta.getString(R.styleable.CalendarView_dateFormat); :
CalendarView
  • Τέλος, χρησιμοποιήστε το στοιχείο της τιμής χαρακτηριστικού:
Fragment

] Δημιουργήστε το έργο και θα παρατηρήσετε τις εμφανιζόμενες αλλαγές ημερομηνίας στο Σχεδιαστής UI για να χρησιμοποιήσετε το πλήρες όνομα του μήνα, όπως 'Ιούλιος 2015'. Δοκιμάστε να δώσετε διαφορετικές τιμές και δείτε τι συμβαίνει.

Στιγμιότυπο οθόνης Αλλαγή του Activity γνωρίσματα.

8. Αλληλεπίδραση με το συστατικό

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

αγοραστική δύναμη και ισχύς προμηθευτή

Η απάντηση περιλαμβάνει δύο μέρη:

  • Καταγράψτε συμβάντα μέσα στο στοιχείο και
  • Αναφορά συμβάντων στον γονέα του στοιχείου (θα μπορούσε να είναι ένα // long-pressing a day grid.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView view, View cell, int position, long id) { // handle long-press if (eventHandler == null) return false; Date date = view.getItemAtPosition(position); eventHandler.onDayLongPress(date); return true; } }); , ένα eventHandler ή ακόμη και ένα άλλο στοιχείο).

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

CalendarView

Υπάρχουν διάφορες μέθοδοι για την αναφορά συμβάντων. Ένα άμεσο και απλό είναι να αντιγράψετε τον τρόπο που το Android το κάνει: παρέχει μια διεπαφή στα συμβάντα του στοιχείου που εφαρμόζεται από τον γονέα του στοιχείου (public interface EventHandler { void onDayLongPress(Date date); } στο παραπάνω απόσπασμα κώδικα).

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

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); HashSet events = new HashSet(); events.add(new Date()); CalendarView cv = ((CalendarView)findViewById(R.id.calendar_view)); cv.updateCalendar(events); // assign event handler cv.setEventHandler(new CalendarView.EventHandler() { @Override public void onDayLongPress(Date date) { // show returned day DateFormat df = SimpleDateFormat.getDateInstance(); Toast.makeText(MainActivity.this, df.format(date), LENGTH_SHORT).show(); } }); }

Η υλοποίηση που παρέχεται από τον γονέα μπορεί να παρασχεθεί στην προβολή ημερολογίου μέσω ενός GridView. Ακολουθεί η χρήση δείγματος από το 'MainActivity.java':

onDayLongPress()

Το παρατεταμένο πάτημα μιας ημέρας θα ενεργοποιήσει ένα συμβάν παρατεταμένου τύπου που συλλαμβάνεται και αντιμετωπίζεται από το Intents και αναφέρθηκε καλώντας BroadcastReceivers στην παρεχόμενη εφαρμογή, η οποία, με τη σειρά της, θα εμφανίσει την ημερομηνία της πιεσμένης ημέρας στην οθόνη:

Στιγμιότυπο οθόνης

Ένας άλλος, πιο προηγμένος τρόπος για να το χειριστείτε είναι με τη χρήση Android Activity και Service . Αυτό είναι ιδιαίτερα χρήσιμο όταν πολλά στοιχεία πρέπει να ειδοποιηθούν για το συμβάν του ημερολογίου. Για παράδειγμα, εάν πατήσετε μια ημέρα στο ημερολόγιο απαιτείται να εμφανίζεται ένα κείμενο σε ένα Activity και ένα αρχείο για λήψη από φόντο EventHandler.

Η χρήση της προηγούμενης προσέγγισης απαιτεί το Service για να παρέχετε ένα Intent στο στοιχείο, χειρισμός του συμβάντος και μετά μεταβίβασή του στο Activity. Αντ 'αυτού, το στοιχείο μεταδίδει ένα Service και τόσο το BroadcastReceivers και Activity την αποδοχή μέσω των δικών τους Service όχι μόνο διευκολύνει τη ζωή, αλλά βοηθά επίσης στην αποσύνδεση του isInEditMode() και το

|_+_|
υπό αμφισβήτηση.

συμπέρασμα

Ιδού η φοβερή δύναμη της προσαρμογής Android! Τιτίβισμα

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

  • Δημιουργήστε τη διάταξη XML και το στυλ που ταιριάζει στις ανάγκες σας.
  • Βγάλτε την κλάση στοιχείων από το κατάλληλο γονικό στοιχείο, σύμφωνα με τη διάταξη XML.
  • Προσθέστε την επιχειρηματική λογική του στοιχείου σας.
  • Χρησιμοποιήστε χαρακτηριστικά για να επιτρέψετε στους χρήστες να τροποποιήσουν τη συμπεριφορά του στοιχείου.
  • Για να διευκολύνετε τη χρήση του στοιχείου στο σχεδιαστή διεπαφής χρήστη, χρησιμοποιήστε το Android
    |_+_|
    λειτουργία.

Σε αυτό το άρθρο, δημιουργήσαμε μια προβολή ημερολογίου ως παράδειγμα, κυρίως επειδή η προβολή ημερολογίου αποθεμάτων είναι, από πολλές απόψεις, λείπει. Όμως, σε καμία περίπτωση δεν περιορίζεστε σε τι είδους συστατικά μπορείτε να δημιουργήσετε. Μπορείτε να χρησιμοποιήσετε την ίδια τεχνική για να δημιουργήσετε οτιδήποτε χρειάζεστε, ο ουρανός είναι το όριο!

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

Είναι επικερδείς οι προσπάθειες εταιρικής ευθύνης;

Διαδικασίες Χρηματοδότησης

Είναι επικερδείς οι προσπάθειες εταιρικής ευθύνης;
Σε αναζήτηση του Elite Few - Εύρεση και πρόσληψη των καλύτερων προγραμματιστών λογισμικού στη βιομηχανία

Σε αναζήτηση του Elite Few - Εύρεση και πρόσληψη των καλύτερων προγραμματιστών λογισμικού στη βιομηχανία

Τροποσ Ζωησ

Δημοφιλείς Αναρτήσεις
Πώς η μηχανική εκμάθηση μπορεί να βελτιώσει την ασφάλεια στον κυβερνοχώρο για αυτόνομα αυτοκίνητα
Πώς η μηχανική εκμάθηση μπορεί να βελτιώσει την ασφάλεια στον κυβερνοχώρο για αυτόνομα αυτοκίνητα
Αυτοματισμός σεληνίου: Μοντέλο αντικειμένου σελίδας και εργοστάσιο σελίδας
Αυτοματισμός σεληνίου: Μοντέλο αντικειμένου σελίδας και εργοστάσιο σελίδας
Μηχανικός Frontfor-end Salesforce
Μηχανικός Frontfor-end Salesforce
Ομιλίες σχεδιασμού: Έρευνα σε δράση με την ερευνητή UX Caitria O'Neill
Ομιλίες σχεδιασμού: Έρευνα σε δράση με την ερευνητή UX Caitria O'Neill
Τι είναι η πρόβλεψη πωλήσεων;
Τι είναι η πρόβλεψη πωλήσεων;
 
Στην υπεράσπιση των θηλυκών μηχανικών
Στην υπεράσπιση των θηλυκών μηχανικών
Ανάπτυξη εφαρμογών ιστού για κινητά: Πότε, Γιατί και Πώς
Ανάπτυξη εφαρμογών ιστού για κινητά: Πότε, Γιατί και Πώς
Αποτελεσματικές επικοινωνιακές στρατηγικές για σχεδιαστές
Αποτελεσματικές επικοινωνιακές στρατηγικές για σχεδιαστές
Τρόπος διεξαγωγής δοκιμών ευχρηστίας σε έξι βήματα
Τρόπος διεξαγωγής δοκιμών ευχρηστίας σε έξι βήματα
Ένας πλήρης οδηγός για τη δοκιμή React Hooks
Ένας πλήρης οδηγός για τη δοκιμή React Hooks
Δημοφιλείς Αναρτήσεις
  • φόρος προσαρμογής συνόρων έναντι δασμών
  • το τελευταίο βήμα στη διαδικασία προϋπολογισμού κεφαλαίου είναι
  • πώς να προγραμματίσετε έναν ρομποτικό βραχίονα
  • πώς να προγραμματίσω σε c
  • ανοίξτε αρχεία xml στο word
  • τι είναι η αρχιτεκτονική πληροφοριών;
  • τι είναι μια εξαγορά διαχείρισης
Κατηγορίες
  • Το Μέλλον Της Εργασίας
  • Πίσω Μέρος
  • Ζωή Σχεδιαστών
  • Διαχείριση Έργου
  • © 2022 | Ολα Τα Δικαιώματα Διατηρούνται

    portaldacalheta.pt