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.

Jeff Friesen

Tetingkap Projek menyoroti W2A , yang merupakan nama W2A.javafail sumber aplikasi (walaupun .javapeluasan 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.javafail bermula dengan kenyataan pakej , yang nama-nama pakej ( ca.javajeff.w2a) yang kedai-kedai dalam W2Akelas. Ini diikuti oleh serangkaian pernyataan import untuk pelbagai jenis API Android. Seterusnya, kod menerangkan W2Akelas, yang memanjang android.app.Activity.

W2Apertama menyatakan androidAnimationbidang jenis contoh android.graphics.drawable.AnimationDrawable. Objek jenis AnimationDrawablemenggambarkan 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. AnimationDrawablesecara tidak langsung memperluaskan android.graphics.drawable.Drawablekelas abstrak , yang merupakan abstraksi umum untuk digambar.

Kaedah onCreate ()

Semua kerja apl berlaku dalam W2Amengatasi '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.mainadalah pengecam (ID) untuk sumber aplikasi, yang berada dalam fail yang berasingan. Anda mentafsirkan ID ini sebagai berikut:

  • Radalah nama kelas yang dihasilkan semasa aplikasi sedang dibina. Kelas ini dinamakan Rkerana kandungannya mengenal pasti pelbagai jenis sumber aplikasi, termasuk susun atur, gambar, rentetan, dan warna.
  • layoutadalah nama kelas yang bersarang di dalamnya R. 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, stringmengenal pasti sumber rentetan.
  • mainadalah nama intpemalar-berdasarkan berdasarkan yang dinyatakan dalam layout. ID sumber ini mengenal pasti sumber susun atur utama. Secara khusus, mainmerujuk kepada main.xmlfail yang menyimpan maklumat susun atur aktiviti utama. mainadalah W2Asatu-satunya sumber susun atur.

Lulus R.layout.mainuntuk 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.xmldan meletakkannya di layar peranti seperti yang ditentukan oleh main.xmldata 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.Viewkelas dan serupa dengan komponen AWT / Swing. Kumpulan tontonan adalah contoh kelas yang menyusun android.view.ViewGroupkelas 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.ImageViewelemen diisytiharkan dalam main.xmldan dikenal pasti sebagai android. Ini membuat ImageViewdan menginisialisasi ke nilai yang dinyatakan dalam main.xmlfail. 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 ImageViewdiwarisi (dari View) void setBackgroundResource(int resID), menetapkan latar belakang pandangan ke sumber yang dikenal pasti oleh resID. Yang R.drawable.android_animatemengenal pasti hujah fail XML bernama android_animate.xml(dibentangkan kemudian), yang menyimpan maklumat mengenai animasi, dan yang disimpan dalam res's drawablesubdirektori. The setBackgroundResource()panggilan menghubungkan androidImagetujuan untuk urutan imej yang digambarkan oleh android_animate.xml, yang akan dilukis pada pandangan ini. Gambar awal dilukis sebagai hasil panggilan kaedah ini.

ImageViewmembolehkan aplikasi menghidupkan urutan yang dapat diubah dengan AnimationDrawablekaedah 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 AnimationDrawablediberikan ImageView, yang kemudiannya ditugaskan ke androidAnimationlapangan. The AnimationDrawablecontoh 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.Buttonkelas.

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 that fill_parent was renamed to match_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 in colors.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.

Memilih dan menyimpan susun atur baru