Android Studio untuk pemula, Bahagian 2: Terokai dan kod aplikasi
Dikemas kini: Januari 2020.
Di Bahagian 1 dari pengenalan pemula ini ke Android Studio, Anda menyiapkan Android Studio di lingkungan pengembangan anda dan mengenali antara muka pengguna. Sekarang, di Bahagian 2, anda akan membuat kod aplikasi pertama anda.
Aplikasi mudah alih animasi terdiri daripada satu aktiviti, yang menampilkan watak robot Android Google dan butang untuk menghidupkan watak tersebut. Mengklik butang menyebabkan watak secara beransur-ansur berubah warna dari hijau ke merah menjadi biru, kemudian kembali ke hijau. Walaupun aplikasinya tidak begitu berguna, menulisnya akan membantu anda selesa menggunakan Android Studio. Pada Bahagian 3, anda akan membuat dan menjalankan aplikasi menggunakan emulator peranti Android dan tablet Kindle Fire.
Perhatikan bahawa siri ini telah dikemas kini untuk Android Studio 3.2.1, keluaran stabil semasa penulisan ini.
Tingkap Projek dan editor Android Studio
Saya memperkenalkan tetingkap utama Android Studio pada akhir Bahagian 1. Tetingkap ini dibahagikan kepada beberapa kawasan, termasuk tetingkap Projek di mana anda mengenal pasti fail sumber aplikasi, dan pelbagai tetingkap editor di mana anda akan menulis kod dan menentukan sumber untuk aplikasi mudah alih di Android Studio. Tetingkap Projek dan tetingkap editor ditunjukkan dalam Rajah 1.

Tetingkap Projek menyoroti W2A , yang merupakan nama W2A.java
fail sumber aplikasi (walaupun .java
peluasan fail tidak ditunjukkan). Sesuai dengan W2A adalah tetingkap editor, dicapai dengan mengklik dua kali W2A di tetingkap Projek. Tetingkap editor mengungkapkan kandungan fail semasa, dalam hal ini kod sumber Java rangka untuk aktiviti utama aplikasi.
Setiap tetingkap editor dikaitkan dengan tab. Sebagai contoh, W2A tetingkap editor 's dikaitkan dengan W2A.java tab. Tab kedua yang dikenal pasti sebagai main.xml (susun atur berasaskan XML lalai untuk aktiviti utama aplikasi) juga ditunjukkan. Anda beralih dari satu tetingkap editor ke tetingkap yang lain dengan mengklik tab tetingkap.
muat turun Dapatkan kod Muat turun kod sumber untuk aplikasi contoh Android: W2A.java. Dicipta oleh Jeff Friesen untuk JavaWorld.Aplikasi contoh Android
Aplikasi contoh ( W2A.java ) terdiri daripada aktiviti utama yang memaparkan watak robot Android dan butang. Apabila pengguna menekan butang, robot bernyawa melalui rangkaian warna. Di bahagian ini, kami akan meneroka kod sumber dan sumber aktiviti.
Terokai dan kod aplikasi contoh Android
Kod sumber aktiviti disimpan dalam fail W2A.java
, ditunjukkan dalam Penyenaraian 1.
Penyenaraian 1. W2A.java
package ca.javajeff.w2a; import android.app.Activity; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; public class W2A extends Activity { AnimationDrawable androidAnimation; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ImageView androidImage = (ImageView) findViewById(R.id.android); androidImage.setBackgroundResource(R.drawable.android_animate); androidAnimation = (AnimationDrawable) androidImage.getBackground(); final Button 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); } }
The W2A.java
fail bermula dengan kenyataan pakej , yang nama-nama pakej ( ca.javajeff.w2a
) yang kedai-kedai dalam W2A
kelas. Ini diikuti oleh serangkaian pernyataan import untuk pelbagai jenis API Android. Seterusnya, kod menerangkan W2A
kelas, yang memanjang android.app.Activity
.
W2A
pertama menyatakan androidAnimation
bidang jenis contoh android.graphics.drawable.AnimationDrawable
. Objek jenis AnimationDrawable
menggambarkan animasi bingkai demi bingkai, di mana gambar semasa digantikan dengan gambar seterusnya dalam urutan animasi.
Apa yang boleh dilukis?
A boleh dilukis adalah sesuatu yang boleh diambil, seperti imej. AnimationDrawable
secara tidak langsung memperluaskan android.graphics.drawable.Drawable
kelas abstrak , yang merupakan abstraksi umum untuk digambar.
Kaedah onCreate ()
Semua kerja apl berlaku dalam W2A
mengatasi 's onCreate(Bundle)
kaedah: ada kaedah lain yang diperlukan, yang membantu untuk memastikan aplikasi ini mudah.
onCreate(Bundle)
pertama menggunakan kaedah superclass yang sama, peraturan yang mesti dipatuhi oleh semua kaedah aktiviti utama.
Kaedah ini kemudian dilaksanakan setContentView(R.layout.main)
untuk mewujudkan antara muka pengguna aplikasi. R.layout.main
adalah pengecam (ID) untuk sumber aplikasi, yang berada dalam fail yang berasingan. Anda mentafsirkan ID ini sebagai berikut:
R
adalah nama kelas yang dihasilkan semasa aplikasi sedang dibina. Kelas ini dinamakanR
kerana kandungannya mengenal pasti pelbagai jenis sumber aplikasi, termasuk susun atur, gambar, rentetan, dan warna.layout
adalah nama kelas yang bersarang di dalamnyaR
. Sumber aplikasi yang IDnya disimpan dalam kelas ini menerangkan sumber susun atur tertentu. Setiap jenis sumber aplikasi dikaitkan dengan kelas bersarang yang dinamakan dengan cara yang serupa. Contohnya,string
mengenal pasti sumber rentetan.main
adalah namaint
pemalar-berdasarkan berdasarkan yang dinyatakan dalamlayout
. ID sumber ini mengenal pasti sumber susun atur utama. Secara khusus,main
merujuk kepadamain.xml
fail yang menyimpan maklumat susun atur aktiviti utama.main
adalahW2A
satu-satunya sumber susun atur.
Lulus R.layout.main
untuk Activity
's void setContentView(int layoutResID)
kaedah mengarahkan Android untuk membuat skrin antara muka pengguna menggunakan maklumat susun atur yang disimpan di dalam main.xml
. Di belakang layar, Android membuat komponen antara muka pengguna yang dijelaskan main.xml
dan meletakkannya di layar peranti seperti yang ditentukan oleh main.xml
data susun atur.
Skrin berdasarkan paparan (abstraksi komponen antara muka pengguna) dan kumpulan pandangan (paparan yang mengaitkan komponen antara muka pengguna yang berkaitan). Tontonan adalah contoh kelas yang mendahului android.view.View
kelas dan serupa dengan komponen AWT / Swing. Kumpulan tontonan adalah contoh kelas yang menyusun android.view.ViewGroup
kelas abstrak dan serupa dengan bekas AWT / Swing. Android merujuk kepada paparan tertentu (seperti butang atau pemutar) sebagai widget .
Berlanjutan, onCreate(Bundle)
dilaksanakan ImageView androidImage = (ImageView) findViewById(R.id.android);
. Kenyataan ini panggilan pertama View
's View findViewById(int id)
kaedah untuk mencari android.widget.ImageView
elemen diisytiharkan dalam main.xml
dan dikenal pasti sebagai android
. Ini membuat ImageView
dan menginisialisasi ke nilai yang dinyatakan dalam main.xml
fail. Penyataan kemudian menyimpan rujukan objek ini dalam pemboleh ubah tempatan androidImage
.
Paparan Imej dan AnimasiTergambar
Seterusnya, androidImage.setBackgroundResource(R.drawable.android_animate);
pernyataan tersebut menggunakan kaedah yang ImageView
diwarisi (dari View
) void setBackgroundResource(int resID)
, menetapkan latar belakang pandangan ke sumber yang dikenal pasti oleh resID
. Yang R.drawable.android_animate
mengenal pasti hujah fail XML bernama android_animate.xml
(dibentangkan kemudian), yang menyimpan maklumat mengenai animasi, dan yang disimpan dalam res
's drawable
subdirektori. The setBackgroundResource()
panggilan menghubungkan androidImage
tujuan untuk urutan imej yang digambarkan oleh android_animate.xml
, yang akan dilukis pada pandangan ini. Gambar awal dilukis sebagai hasil panggilan kaedah ini.
ImageView
membolehkan aplikasi menghidupkan urutan yang dapat diubah dengan AnimationDrawable
kaedah panggilan . Sebelum app boleh melakukan ini, ia perlu mendapatkan ImageView
's AnimationDrawable
. The androidAnimation = (AnimationDrawable) androidImage.getBackground();
kenyataan tugasan yang berikut Kuasa melakukan tugas ini dengan memohon ImageView
's diwarisi (dari View
) Drawable getBackground()
kaedah. Kaedah ini mengembalikan yang AnimationDrawable
diberikan ImageView
, yang kemudiannya ditugaskan ke androidAnimation
lapangan. The AnimationDrawable
contoh digunakan untuk memulakan dan menghentikan animasi, proses saya akan terangkan sebentar lagi.
Akhirnya, onCreate(Bundle)
membuat butang Animate . Ia findByViewId(int)
meminta untuk mendapatkan maklumat butang dari main.xml
, kemudian membuat android.widget.Button
kelas.
It then employs the View
class's nested onClickListener
interface to create a listener object. This object's void onClick(View v)
method is invoked whenever the user clicks the button. The listener is registered with its Button
object by calling View
's void setOnClickListener(AdapterView.OnClickListener listener)
method.
To stop, then start the animation, Animate's click listener invokes androidAnimation.stop();
followed by androidAnimation.start();
. The stop()
method is called before start()
to ensure that a subsequent click of the Animate button causes a new animation to begin.
Update and save your code
Before we continue, replace the skeletal code in your W2A.java tab with the code from Listing 1. Save the contents of this window by pressing Ctrl+S, or select Save All from the File menu.
Coding the Android app's main.xml
The app's main activity is associated with an XML-based layout, which is stored in file main.xml
, and which is presented in Listing 2.
Listing 2. main.xml
After the XML declaration, Listing 2 declares a LinearLayout
element that specifies a layout (a view group that arranges contained views on an Android device's screen in some manner) for arranging contained widgets (including nested layouts) either horizontally or vertically across the screen.
The tag specifies several attributes for controlling this linear layout. These attributes include the following:
orientation
identifies the linear layout as horizontal or vertical. Contained widgets are laid out horizontally or vertically, and the default orientation is horizontal."horizontal"
and"vertical"
are the only legal values that can be assigned to this attribute.layout_width
identifies the width of the layout. Legal values include"fill_parent"
(to be as wide as the parent) and"wrap_content"
(to be wide enough to enclose content). (Note thatfill_parent
was renamed tomatch_parent
in Android 2.2, but is still supported and widely used.)layout_height
identifies the height of the layout. Legal values include"fill_parent"
(to be as tall as the parent) and"wrap_content"
(to be tall enough to enclose content).gravity
identifies how the layout is positioned relative to the screen. For example,"center"
specifies that the layout should be centered horizontally and vertically on the screen.background
identifies a background image, a gradient, or a solid color. For simplicity, I've hardcoded a hexadecimal color identifier to signify a solid white background (#ffffff
). (Colors would normally be stored incolors.xml
and referenced from this file.)
The LinearLayout
element encapsulates ImageView
and Button
elements. Each of these elements specifies an id
attribute, which identifies the element so that it can be referenced from code. The resource identifier (special syntax that begins with @
) assigned to this attribute begins with the @+id
prefix. For example, @+id/android
identifies the ImageView
element as android
; this element is referenced from code by specifying R.id.android
.
These elements also specify layout_width
and layout_height
attributes for determining how their content is laid out. Each attribute is assigned wrap_content
so that the element will appear at its natural size.
ImageView
specifies a layout_marginBottom
attribute to identify a space separator between itself and the button that follows vertically. The space is specified as 10 dips, or density-independent pixels. These are virtual pixels that apps can use to express layout dimensions/positions in a screen density-independent way.
Density-independent pixels
A piksel ketumpatan bebas (dip) adalah bersamaan dengan satu piksel fizikal pada skrin 160 dpi, ketumpatan asas yang diandaikan oleh Android. Pada waktu runtime, Android secara transparan menangani sebarang skala unit dip yang diperlukan, berdasarkan kepadatan sebenar layar yang digunakan. Unit dip ditukarkan ke piksel skrin melalui persamaan: piksel = dip * (ketumpatan / 160) . Sebagai contoh, pada skrin 240-dpi, 1 celup sama dengan 1.5 piksel fizikal. Google mengesyorkan menggunakan unit dip untuk menentukan antara muka pengguna aplikasi anda untuk memastikan paparan antara muka pengguna yang betul pada skrin peranti yang berbeza.