Προγραμματισμός

Android Studio για αρχάριους, Μέρος 2: Εξερευνήστε και κωδικοποιήστε την εφαρμογή

Ενημερώθηκε: Ιανουάριος 2020.

Στο Μέρος 1 αυτής της εισαγωγής για αρχάριους στο Android Studio, ρυθμίζετε το Android Studio στο περιβάλλον ανάπτυξης και γνωρίσατε τη διεπαφή χρήστη. Τώρα, στο Μέρος 2, θα κωδικοποιήσετε την πρώτη σας εφαρμογή.

Η κινούμενη εφαρμογή για κινητά αποτελείται από μία δραστηριότητα, η οποία παρουσιάζει τον χαρακτήρα ρομπότ Android της Google και ένα κουμπί για την κινούμενη εικόνα. Κάνοντας κλικ στο κουμπί, ο χαρακτήρας αλλάζει σταδιακά το χρώμα από πράσινο σε κόκκινο σε μπλε και μετά σε πράσινο. Ενώ η εφαρμογή δεν είναι ιδιαίτερα χρήσιμη, η σύνταξη θα σας βοηθήσει να εξοικειωθείτε με τη χρήση του Android Studio. Στο Μέρος 3, θα δημιουργήσετε και θα εκτελέσετε την εφαρμογή χρησιμοποιώντας έναν εξομοιωτή συσκευής Android και ένα tablet Kindle Fire.

Σημειώστε ότι αυτή η σειρά έχει ενημερωθεί για το Android Studio 3.2.1, την τρέχουσα σταθερή κυκλοφορία από αυτήν τη συγγραφή.

Windows Studio Project και προγράμματα επεξεργασίας

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

Τζεφ Φρίσεν

Το παράθυρο του έργου επισημαίνει W2A, το οποίο είναι το όνομα της εφαρμογής W2A.java αρχείο προέλευσης (αν και το .Ιάβα η επέκταση αρχείου δεν εμφανίζεται). Που αντιστοιχεί σε W2A είναι ένα παράθυρο επεξεργαστή, με διπλό κλικ W2A στο παράθυρο του έργου. Το παράθυρο του προγράμματος επεξεργασίας αποκαλύπτει το τρέχον περιεχόμενο του αρχείου, σε αυτήν την περίπτωση ο σκελετικός πηγαίος κώδικας Java για την κύρια δραστηριότητα της εφαρμογής.

Κάθε παράθυρο του προγράμματος επεξεργασίας σχετίζεται με μια καρτέλα. Για παράδειγμα, W2AΤο παράθυρο του προγράμματος επεξεργασίας σχετίζεται με ένα W2A.java αυτί. Μια δεύτερη καρτέλα αναγνωρίστηκε ως main.xml (η προεπιλεγμένη διάταξη που βασίζεται σε XML για την κύρια δραστηριότητα της εφαρμογής) εμφανίζεται επίσης. Μετακινείτε από το ένα παράθυρο του προγράμματος επεξεργασίας στο άλλο κάνοντας κλικ στην καρτέλα του παραθύρου.

λήψη Λήψη του κώδικα Λήψη του πηγαίου κώδικα για το παράδειγμα εφαρμογής Android: W2A.java. Δημιουργήθηκε από τον Jeff Friesen για το JavaWorld.

Η εφαρμογή Android για παράδειγμα

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

Εξερευνήστε και κωδικοποιήστε την εφαρμογή παραδείγματος Android

Ο πηγαίος κώδικας της δραστηριότητας αποθηκεύεται στο αρχείο W2A.java, παρουσιάζεται στην καταχώριση 1.

Λίστα 1. W2A.java

 πακέτο ca.javajeff.w2a; εισαγωγή android.app.Activity; εισαγωγή android.graphics.drawable.AnimationDrawable; εισαγωγή android.os.Bundle; εισαγωγή android.view.View; εισαγωγή android.widget.Button; εισαγωγή android.widget.ImageView; Η δημόσια τάξη W2A επεκτείνει τη δραστηριότητα {AnimationDrawable androidAnimation; @Override public void onCreate (BundleavedInstanceState) {super.onCreate (αποθηκευμένοInstanceState); setContentView (R.layout.main); ImageView androidImage = (ImageView) findViewById (R.id.android); androidImage.setBackgroundResource (R.drawable.android_animate); androidAnimation = (AnimationDrawable) androidImage.getBackground (); τελικό κουμπί btnAnimate = (Button) findViewById (R.id.animate); View.OnClickListener ocl; ocl = new View.OnClickListener () {@ Override public void onClick (View v) {androidAnimation.stop (); androidAnimation.start (); }} btnAnimate.setOnClickListener (ocl); }} 

ο W2A.java το αρχείο ξεκινά με ένα δήλωση πακέτου, που ονομάζει το πακέτο (ca.javajeff.w2a) που αποθηκεύει το W2A τάξη. Ακολουθεί μια σειρά δηλώσεων εισαγωγής για διάφορους τύπους API Android. Στη συνέχεια, ο κώδικας περιγράφει το W2A τάξη, η οποία επεκτείνεται android.app.Activity.

W2A δηλώνει πρώτα ένα androidAnimation πεδίο εμφάνισης τύπου android.graphics.drawable.AnimationDrawable. Αντικείμενα τύπου Κινούμενη εικόνα περιγράψτε κινούμενες εικόνες καρέ-καρέ, στις οποίες το τρέχον σχέδιο μπορεί να αντικατασταθεί με το επόμενο σχέδιο στην ακολουθία κινούμενων σχεδίων.

Τι είναι ένα σχέδιο;

ΕΝΑ σχέδιο είναι κάτι που μπορεί να σχεδιαστεί, όπως μια εικόνα. Κινούμενη εικόνα επεκτείνει έμμεσα την περίληψη android.graphics.drawable.Drawable τάξη, η οποία είναι μια γενική αφαίρεση για ένα σχέδιο.

Η μέθοδος onCreate ()

Όλες οι εργασίες της εφαρμογής πραγματοποιούνται W2Aυπερισχύει onCreate (δέσμη) μέθοδος: δεν απαιτούνται άλλες μέθοδοι, κάτι που βοηθά στη διατήρηση αυτής της εφαρμογής απλής.

onCreate (δέσμη) αρχικά επικαλείται την ίδια ονομασία της μεθόδου superclass, έναν κανόνα που πρέπει να ακολουθείται από όλες τις επικρατούσες μεθόδους δραστηριότητας.

Στη συνέχεια, αυτή η μέθοδος εκτελείται setContentView (R.layout.main) για τη δημιουργία της διεπαφής χρήστη της εφαρμογής. R.layout.main είναι ένα αναγνωριστικό (ID) για έναν πόρο εφαρμογής, ο οποίος βρίσκεται σε ξεχωριστό αρχείο. Ερμηνεύετε αυτό το αναγνωριστικό ως εξής:

  • Ρ είναι το όνομα μιας κλάσης που δημιουργείται κατά την κατασκευή της εφαρμογής. Αυτή η τάξη ονομάζεται Ρ επειδή το περιεχόμενό του προσδιορίζει διάφορα είδη πόρων εφαρμογών, συμπεριλαμβανομένων διατάξεων, εικόνων, συμβολοσειρών και χρωμάτων.
  • σχέδιο είναι το όνομα μιας τάξης που βρίσκεται μέσα Ρ. Ένας πόρος εφαρμογής του οποίου το αναγνωριστικό είναι αποθηκευμένο σε αυτήν την τάξη περιγράφει έναν συγκεκριμένο πόρο διάταξης. Κάθε είδος πόρου εφαρμογής σχετίζεται με ένθετη τάξη που ονομάζεται με παρόμοιο τρόπο. Για παράδειγμα, σειρά προσδιορίζει πόρους συμβολοσειράς.
  • κύριος είναι το όνομα ενός int- βασισμένη σταθερά εντός σχέδιο. Αυτό το αναγνωριστικό πόρου προσδιορίζει τον κύριο πόρο διάταξης. ΕΙΔΙΚΑ, κύριος αναφέρεται σε ένα main.xml αρχείο που αποθηκεύει τις πληροφορίες διάταξης της κύριας δραστηριότητας. κύριος είναι W2Aο μόνος πόρος διάταξης.

Πέρασμα R.layout.main προς την Δραστηριότητα'μικρό void setContentView (int layoutResID) Η μέθοδος δίνει εντολή στο Android να δημιουργήσει μια οθόνη διεπαφής χρήστη χρησιμοποιώντας τις πληροφορίες διάταξης που είναι αποθηκευμένες στο main.xml. Πίσω από τα παρασκήνια, το Android δημιουργεί στοιχεία διεπαφής χρήστη που περιγράφονται στο main.xml και τις τοποθετεί στην οθόνη της συσκευής όπως καθορίζεται από main.xmlτα δεδομένα διάταξης.

Η οθόνη βασίζεται προβολές (αφαιρέσεις στοιχείων διεπαφής χρήστη) και προβολή ομάδων (προβάλλει τα συστατικά στοιχεία διεπαφής χρήστη που σχετίζονται με την ομάδα). Προβολές είναι περιπτώσεις κλάσεων που υποκατηγορούν το android.view.View κατηγορίας και είναι ανάλογα με τα εξαρτήματα AWT / Swing. Προβολή ομάδων είναι περιπτώσεις κλάσεων που υποκατηγορούν την περίληψη android.view.ViewGroup κατηγορίας και είναι ανάλογα με τα δοχεία AWT / Swing. Το Android αναφέρεται σε συγκεκριμένες προβολές (όπως κουμπιά ή κλώστες) ως γραφικά στοιχεία.

Συνεχίζοντας, onCreate (δέσμη) εκτελεί ImageView androidImage = (ImageView) findViewById (R.id.android);. Αυτή η δήλωση καλεί πρώτα Θέα'μικρό Προβολή findViewById (int id) μέθοδο για να βρείτε το android.widget.ImageView στοιχείο δηλωμένο σε main.xml και ταυτοποιήθηκε ως Android. Παρουσιάζει Προβολή εικόνας και το αρχικοποιεί στις τιμές που δηλώνονται στο main.xml αρχείο. Στη συνέχεια, η δήλωση αποθηκεύει την αναφορά αυτού του αντικειμένου σε τοπική μεταβλητή androidImage.

ImageView και AnimationDrawable

Στη συνέχεια, το androidImage.setBackgroundResource (R.drawable.android_animate); η δήλωση επικαλείται Προβολή εικόναςκληρονομήθηκε (από Θέα) void setBackgroundResource (int resID) μέθοδος, ορίζοντας το φόντο της προβολής στον πόρο που προσδιορίζεται από κατοικεί. ο R.drawable.android_animate Το όρισμα προσδιορίζει ένα αρχείο XML με το όνομα android_animate.xml (παρουσιάζεται αργότερα), το οποίο αποθηκεύει πληροφορίες σχετικά με το κινούμενο σχέδιο και το οποίο αποθηκεύεται στο res'μικρό σχέδιο υποκατάλογος ο setBackgroundResource () η κλήση συνδέει το androidImage προβολή της ακολουθίας εικόνων που περιγράφονται από το android_animate.xml, η οποία θα σχεδιαστεί σε αυτήν την προβολή. Η αρχική εικόνα σχεδιάζεται ως αποτέλεσμα αυτής της μεθόδου κλήσης.

Προβολή εικόνας επιτρέπει σε μια εφαρμογή να ζωντανεύει μια ακολουθία drawables καλώντας Κινούμενη εικόνα μεθόδους. Προτού το κάνει αυτό η εφαρμογή, πρέπει να το αποκτήσει Προβολή εικόνας'μικρό Κινούμενη εικόνα. ο androidAnimation = (AnimationDrawable) androidImage.getBackground (); δήλωση ανάθεσης που ακολουθεί ολοκληρώνει αυτήν την εργασία με την επίκληση Προβολή εικόναςκληρονομήθηκε (από Θέα) Σχέδιο getBackground () μέθοδος. Αυτή η μέθοδος επιστρέφει το Κινούμενη εικόνα για το δεδομένο Προβολή εικόνας, το οποίο στη συνέχεια ανατίθεται στο androidAnimation πεδίο. ο Κινούμενη εικόνα Το παράδειγμα χρησιμοποιείται για να ξεκινήσει και να σταματήσει μια κίνηση, μια διαδικασία που θα περιγράψω σύντομα.

Τελικά, onCreate (δέσμη) δημιουργεί το Εμψυχος κουμπί. Επικαλείται findByViewId (int) για να λάβετε τις πληροφορίες κουμπιού από main.xml, στη συνέχεια, δημιουργεί το android.widget.Button τάξη.

Στη συνέχεια, χρησιμοποιεί το Θέα ένθετο της τάξης onClickListener διεπαφή για να δημιουργήσετε ένα αντικείμενο ακρόασης. Αυτό το αντικείμενο είναι void onClick (Προβολή v) Η μέθοδος καλείται κάθε φορά που ο χρήστης κάνει κλικ στο κουμπί. Ο ακροατής είναι εγγεγραμμένος στο Κουμπί αντικείμενο καλώντας Θέα'μικρό void setOnClickListener (ακροατής AdapterView.OnClickListener) μέθοδος.

Για να σταματήσετε και, στη συνέχεια, ξεκινήστε την κίνηση, Εμψυχοςεπικαλείται ο ακροατής κλικ androidAnimation.stop (); ακολουθούμενη από androidAnimation.start ();. ο να σταματήσει() η μέθοδος καλείται πριν αρχή() για να διασφαλιστεί ότι ένα επόμενο κλικ του Εμψυχος Το κουμπί προκαλεί την έναρξη μιας νέας κινούμενης εικόνας.

Ενημερώστε και αποθηκεύστε τον κωδικό σας

Πριν συνεχίσουμε, αντικαταστήστε τον σκελετικό κώδικα στο W2A.java καρτέλα με τον κωδικό από την Καταχώριση 1. Αποθηκεύστε τα περιεχόμενα αυτού του παραθύρου πατώντας Ctrl + Sή επιλέξτε Αποθήκευση όλων από το Αρχείο μενού.

Κωδικοποίηση του main.xml της εφαρμογής Android

Η κύρια δραστηριότητα της εφαρμογής σχετίζεται με μια διάταξη που βασίζεται σε XML, η οποία είναι αποθηκευμένη σε αρχείο main.xml, και το οποίο παρουσιάζεται στη Λίστα 2.

Λίστα 2. main.xml

Μετά τη δήλωση XML, η Λίστα 2 δηλώνει α Γραμμική διάταξη στοιχείο που καθορίζει ένα σχέδιο (μια ομάδα προβολής που ταξινομεί τις περιεχόμενες προβολές στην οθόνη μιας συσκευής Android με κάποιο τρόπο) για τη διάταξη των περιεχομένων widget (συμπεριλαμβανομένων ένθετων διατάξεων) είτε οριζόντια είτε κάθετα κατά μήκος της οθόνης.

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

  • προσανατολισμός προσδιορίζει τη γραμμική διάταξη ως οριζόντια ή κάθετη. Τα περιεχόμενα γραφικά τοποθετούνται οριζόντια ή κάθετα και ο προεπιλεγμένος προσανατολισμός είναι οριζόντιος. "οριζόντιος" και "κατακόρυφος" είναι οι μόνες νομικές τιμές που μπορούν να εκχωρηθούν σε αυτό το χαρακτηριστικό.
  • πλάτος_διάταξης προσδιορίζει το πλάτος της διάταξης. Οι νομικές αξίες περιλαμβάνουν "fill_parent" (να είναι τόσο ευρύ όσο ο γονέας) και "wrap_content" (να είναι αρκετά ευρύ για να περικλείει περιεχόμενο). (Σημειώστε ότι fill_parent μετονομάστηκε σε match_parent στο Android 2.2, αλλά εξακολουθεί να υποστηρίζεται και να χρησιμοποιείται ευρέως.)
  • διάταξη_ ύψος προσδιορίζει το ύψος της διάταξης. Οι νομικές αξίες περιλαμβάνουν "fill_parent" (να είναι τόσο ψηλός όσο ο γονέας) και "wrap_content" (να είναι αρκετά ψηλό για να περικλείει περιεχόμενο).
  • βαρύτητα προσδιορίζει τον τρόπο τοποθέτησης της διάταξης σε σχέση με την οθόνη. Για παράδειγμα, "κέντρο" καθορίζει ότι η διάταξη πρέπει να κεντράρει οριζόντια και κάθετα στην οθόνη.
  • Ιστορικό προσδιορίζει μια εικόνα φόντου, μια κλίση ή ένα συμπαγές χρώμα. Για απλότητα, έχω κωδικοποιήσει ένα δεκαεξαδικό αναγνωριστικό χρώματος για να δηλώσω ένα συμπαγές λευκό φόντο (#ffffff). (Τα χρώματα συνήθως αποθηκεύονταν σε colors.xml και αναφέρεται από αυτό το αρχείο.)

ο Γραμμική διάταξη στοιχείο ενσωματώνει Προβολή εικόνας και Κουμπί στοιχεία. Κάθε ένα από αυτά τα στοιχεία καθορίζει ένα ταυτότητα χαρακτηριστικό, το οποίο προσδιορίζει το στοιχείο έτσι ώστε να μπορεί να αναφέρεται από κώδικα. ο αναγνωριστικό πόρου (ειδική σύνταξη που ξεκινά με @) εκχωρείται σε αυτό το χαρακτηριστικό ξεκινά με το @ + αναγνωριστικό πρόθεμα. Για παράδειγμα, @ + id / Android προσδιορίζει το Προβολή εικόνας στοιχείο ως Android; αυτό το στοιχείο αναφέρεται από τον κώδικα καθορίζοντας R.id.android.

Αυτά τα στοιχεία καθορίζουν επίσης πλάτος_διάταξης και διάταξη_ ύψος χαρακτηριστικά για τον προσδιορισμό του τρόπου με τον οποίο παρουσιάζεται το περιεχόμενό τους Κάθε χαρακτηριστικό έχει εκχωρηθεί wrap_content έτσι ώστε το στοιχείο να εμφανίζεται στο φυσικό του μέγεθος.

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

Χωρίς πυκνότητα εικονοστοιχεία

ΕΝΑ ανεξάρτητο από πυκνότητα pixel (βουτιά) ισοδυναμεί με ένα φυσικό εικονοστοιχείο σε οθόνη 160-dpi, την πυκνότητα βάσης που υποτίθεται από το Android. Κατά το χρόνο εκτέλεσης, το Android χειρίζεται με διαφάνεια οποιαδήποτε κλιμάκωση των απαιτούμενων μονάδων εμβύθισης, με βάση την πραγματική πυκνότητα της οθόνης που χρησιμοποιείται. Οι μονάδες εμβάπτισης μετατρέπονται σε pixel οθόνης μέσω της εξίσωσης: pixel = εμβυθίσεις * (πυκνότητα / 160). Για παράδειγμα, σε μια οθόνη 240-dpi, 1 εμβάπτιση ισούται με 1,5 φυσικά pixel. Η Google συνιστά τη χρήση μονάδων εμβάπτισης για τον καθορισμό της διεπαφής χρήστη της εφαρμογής σας, ώστε να διασφαλίζεται η σωστή εμφάνιση της διεπαφής χρήστη σε διαφορετικές οθόνες συσκευών.

Επιλογή και αποθήκευση νέας διάταξης