Android – Ví dụ Hello World (Hello World Example)


Những kiến thức khô khan ở các phần vừa rồi chẳng lý thú chút nào. Tuy nhiên đó là những điểm cơ bản chúng ta cần nắm trước khi bắt tay vào thực hành. Đã đến lúc viết ứng dụng đầu tiên rồi, bắt đầu thôi! Hãy chắc chắn bạn đã thực hiện các hướng dẫn của phần Android – Thành phần ứng dụng (Application components).

Những hướng dẫn của tôi xem mặc định như bạn đã sử dụng Eclipse IDE thông thạo. Chúng ta sẽ cùng viết một ứng dụng Android đơn giản, nhiệm vụ của nó là in ra dòng chữ “Hello World!”.

Tạo ứng dụng Android

Bước 1 – Tạo Project mới trong Eclipse.

Mở Eclipse, chọn menu File -> New -> Project, sau đó chọn Android New Application wizard từ danh sách các wizard. Hãy đặt tên cho ứng dụng là HelloWorld và thiết lập các thông số khác như hình bên dưới:

hello_word.jpg

Tiếp tục làm theo hướng dẫn của wizard, giữ các thông số theo mặc định, bấm nút Next cho tới khi kết thúc. Nếu Project được tạo thành công, bạn sẽ thấy màn hình hiện lên như hình bên dưới:

hello_android_project

Cấu trúc của một Project Android

Hãy tìm hiểu một chút về các thư mục và tập tin trong Project Android:

hello_word1

Stt Thư mục, Tập tin và mô tả
1 src  Thư mục này chứa các tập tin nguồn đuôi .java. Theo mặc định, nó chứa 1 tập tin nguồn MainActivity.java. Trong tập tin này có chứa lớp Activity  sẽ chạy khi mở ứng dụng bằng cách chạm vào biểu tượng ứng dụng trên màn hình.
2 gen Thư mục này chứa các tập tin nguồn đuôi .R – một tập tin được tạo ra bởi trình biên dịch (compiler). Các tập tin này sẽ  tham khảo tới toàn bộ tài nguyên trong Project. Bạn không nên chỉnh sửa chúng.
3 bin Thư mục này chứa các tập tin là các gói Android có đuôi .apk – được tạo ra bởi ADT trong quá trình build. Ngoài ra, thư mục bin cũng chứa những tập tin khác cần thiết để chạy ứng dụng Android đang được lập trình trong Project này.
4 res/drawable-hdpi  Thư mục này dành cho hình ảnh dành cho màn hình độ phân giải cao.
5 res/layout Thư mục này chứa các tập tin xác định giao diện của ứng dụng.
6 res/values Thư mục này chuawsc các tập tin XML, chứa tập hợp tài nguyên như là các chuỗi, định nghĩa các màu.
7 AndroidManifest.xml là tập tin manifest diễn tả tính chất cơ bản của ứng dụng và xác định các Component.

Sau đây chúng ta sẽ tìm hiểu một vài tập tin quan trọng trong cấu trúc thư mục Project của một ứng dụng.

Tập tin Activity chính (Main Activity)

Tập tin Activity chính là một tập tin đuôi Java MainActivity.java. Tập tin này sẽ được chuyển thành tập tin chạy Dalvik (Dalvik executable) và chạy ứng dụng của bạn. Sau đây là đoạn mã nguồn mặc định, được tạo ra tự động khi chúng ta tạo mới ứng dụng HelloWorld:

package com.example.helloworld;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;

public class MainActivity extends Activity {

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
   }
   
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.activity_main, menu);
      return true;
   }
}

Ở đây, R.layout.activity_main tham khảo tới activity_main.xml, nằm trong thư mục res/layout folder. Phương thức onCreate() là một trong những phương thức được xác định khi Activity khởi tạo.

Tập tin Manifest

Bạn phải khai báo tất cả Components trong manifest.xml nằm ở cuối thư mục Project. Tập tin này giống như là một giao diện nằm giữa hệ điều hành Android và ứng dụng của bạn, vì vậy nếu bạn không khai báo Component trong tập tin Manifest, Component sẽ không được biết đến bởi hệ điều hành. Một tập tin Manifest thường trông như thế này:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.helloworld"
   android:versionCode="1"
   android:versionName="1.0" >
   
   <uses-sdk
      android:minSdkVersion="8"
      android:targetSdkVersion="22" />
   
   <application
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name"
       android:theme="@style/AppTheme" >
       
       <activity
          android:name=".MainActivity"
          android:label="@string/title_activity_main" >
       
          <intent-filter>
             <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER"/>
          </intent-filter>
       
       </activity>
       
   </application>
</manifest>

Ở đây thẻ (tag) <application>…</application> bao bọc những Components được sử dụng trong ứng dụng. Thuộc tính (attribute) android:icon chỉ tới biểu tượng ứng dụng nằm ở trong thư mục res/drawable-hdpi, có nghĩa là ứng dụng dùng hình ảnh  có tên ic_launcher.png nằm trong thư mục drawable.

Thẻ <activity> dùng để chỉ tới các Activity và thuộc tính android:name xác định tên của Activity được dùng trong Project trong khi thuộc tính android:label chỉ tới chuỗi biểu diễn tên được hiển thị khi chạy(label) cho ứng dụng. Bạn hoàn toàn có thể thêm nhiều trong thẻ <activity>.

Trong thẻ <action> nằm trong <intent-filter> xác định android:name=“android.intent.action.MAIN”, có nghĩa là Activity này là Activity chính, được gọi khi mở ứng dụng.  <category android:name=“android.intent.category.LAUNCHER”/> chỉ ra rằng ứng dụng có thể được mở bằng cách chọn biểu tượng ứng dụng trên màn hình chính.

Bạn có thể thắc mắc @string là gì? @string chỉ tới tập tin strings.xml. Vậy nên, @string/app_name chỉ tới chuỗi tên là app_name, được tạo trong tập tin strings.xml. Trong trường hợp Project của chúng ta, bản sẽ thấy chuỗi này có giá trị là “HelloWorld”.

Sau đây là một số thẻ mà bạn sẽ dùng trong tập tin manifest để định nghĩa các Component trong ứng dụng Android:

  • <activity> để khai báo các Activity
  • <service> để khai báo các Service
  • <receiver> để khai báo các Broadcast receiver
  • <provider> để khai báo các Content provider

Tập tin chứa các chuỗi

Tập tin strings.xml nằm trong thư mục res/values và nó chứa tất cả các chuỗi được dùng trong ứng dụng. Ví dụ tên của nút bấm, nhãn, văn bản mặc định và những loại tương tự như chuỗi đều được chứa trong strings.xml. Ví dụ, một tập tin strings.xml sẽ trông như thế này:

<resources>
   <string name="app_name">HelloWorld</string>
   <string name="hello_world">Hello world!</string>
   <string name="menu_settings">Settings</string>
   <string name="title_activity_main">MainActivity</string>
</resources>

Tập tin R.java

Tập tin gen/com.example.helloworld/R.java là kết nối giữa các tập tin đuôi Java như MainActivity.java và các tài nguyên như strings.xml. Nó được tạo tự động và bạn không nên chỉnh sửa nội dung của tập tin R.java. Tập tin này trông như bên dưới:

/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */

package com.example.helloworld;

public final class R {
   public static final class attr {
   }
   
   public static final class dimen {
      public static final int padding_large=0x7f040002;
      public static final int padding_medium=0x7f040001;
      public static final int padding_small=0x7f040000;
   }
   
   public static final class drawable {
      public static final int ic_action_search=0x7f020000;
      public static final int ic_launcher=0x7f020001;
   }
   
   public static final class id {
      public static final int menu_settings=0x7f080000;
   }
   
   public static final class layout {
      public static final int activity_main=0x7f030000;
   }
   
   public static final class menu {
      public static final int activity_main=0x7f070000;
   }
   
   public static final class string {
      public static final int app_name=0x7f050000;
      public static final int hello_world=0x7f050001;
      public static final int menu_settings=0x7f050002;
      public static final int title_activity_main=0x7f050003;
   }
   
   public static final class style {
      public static final int AppTheme=0x7f060000;
   }
}

Tập tin bố cục (Layout File)

Tập tin activity_main.xml là một tập tin bố cục trong thư mục res/layout, cái mà sẽ được tham khảo bởi ứng dụng khi xây dựng giao diện. Bạn sẽ thao tác nhiều và thường xuyên ở tập tin này để thay đổi bố cục của ứng dụng. Ứng dụng HelloWorld của chúng ta có tập tin activity_main.xml như bên dưới:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent" >
   
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerHorizontal="true"
      android:layout_centerVertical="true"
      android:padding="@dimen/padding_medium"
      android:text="@string/hello_world"
      tools:context=".MainActivity" />
      
</RelativeLayout>

Đây là ví dụ của bố cục đơn giản nhất RelativeLayout, chúng ta sẽ tìm hiểu sâu hơn trong một phần khác. Thẻ TextView có nhiều thuộc tính khác nhau như android:layout_width, android:layout_height… để xác định chiều rộng và chiều dài của thành phần TextView.

Chạy Ứng Dụng

Hãy thử chạy ứng dụng HelloWorld chúng ta vừa tạo. Hãy nhớ tạo một thiết bị Android ảo (AVD) như hướng dẫn Android – Thiết lập môi trường (Environment setup) trước khi chạy. Bấm vào biểu tượng Run trên thanh công cụ. Eclipse sẽ cài đặt ứng dụng lên AVD và chạy nó. Nếu mọi việc bình thường, cửa sổ trình giả lập thiết bị, hay còn gọi là Emulator sẽ xuất hiện trên màn hình:

android_hello_world.jpg

Chúc mừng bạn!!! Cuối cùng bạn đã lập trình được ứng dụng Android đầu tiên và chỉ cần tiếp tục với các phần tài liệu còn lại, bạn sẽ trở thành một nhà lập trình Android lão luyện.

826 Total Views 4 Views Today