Trong phần này, tôi sẽ hướng dẫn bạn từng bước xây dựng một ứng dụng Android, các kiến thức cơ bản sẽ được đề cập bao gồm:
- Gọi Activity từ Activity khác
- Xử lý sự kiện cơ bản
- Xây dựng giao diện cơ bản.
Để làm bài này, bạn cần chạy thành công ví dụ Android “HelloWorld” và hiểu cấu trúc project Android. Bạn có thể xem phần này ở đây
Tạo project: AndroidBasic
Các bước thực hiện
- Trong Android Studio, chọn menu File | New | New Project… để tạo project mới



- Name: AndroidBasic
- Package name: vn.aptech.androidbasic
- Language: Java
Cấu trúc project khi hoàn thành

Thêm vào project 5 Activity
- Example1Activity
- Example2Activity
- Example3Activity
- Example4Activity
- Example5Activity
Trong Android Studio, chọn menu File | New | Activity |


Chú ý: Tất cả các Activity vừa tạo mới không phải là một Activity chính, nó được gọi từ MainActivity, vì vậy bạn không nên check vào “Launcher Activity”.
5 Activity mới đã được tạo ra

Và thông tin đã được đăng ký vào AndroidManifest.xml

Thiết kết giao diện main_activity.xml
Trong Android Studio, mở tập tin main_activity.xml để thiết kế giao diện cho màn hình này
Cửa sổ thiết kế có 3 chể độ (mode)
- Code
- Split
- Design



Thường bạn làm việc tại chế độ Design (Design mode), nó giúp bạn kéo thả các thành phần vào trong giao diện và tự động sinh ra (generate) mã XML:
Chúng ta thiết kế giao diện đơn giản, gồm 5 Button:

Thiết lập các ràng buộc (constraint) cho các Button.

Đặt ID, Text cho các Button trên giao diện. ID rất quan trọng, trong mã Java bạn có thể truy cập vào một Button thông qua ID của nó.


Trên cửa sổ thiết kế, chuyển sang chế độ Code (Code mode), bạn sẽ nhìn thấy mã XML được sinh ra (generate).

Gọi một Activty từ Activity khác
Ở đây chúng ta sẽ xử lý các sự kiện khi người dùng nhấn vào các Button, chúng sẽ gọi đến các Example1Activity, .. Example5Activity tương ứng.

Các Activity giao tiếp với nhau thông qua một đối tượng Intent. Ví dụ Activity1 muốn gọi Activity2 chạy, nó đóng gói những gì cần nói, và lời yêu cầu vào một đối tượng Intent và gửi đối tượng Intent này tới Activity2.

Mở lớp MainActivity, trên code Java bạn có thể truy cập tới các Button thông qua ID của chúng.
// Lấy ra button theo ID Button button1 = (Button) this.findViewById(R.id.go_button1); // Sét đặt sự kiện Click vào Button1. button1.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // Tạo một Intent: // (Đối tượng chứa nội dung sẽ được gửi đến Example1Activity). Intent myIntent = new Intent(MainActivity.this, Example1Activity.class); // Các tham số gắn trên Intent (Không bắt buộc). myIntent.putExtra("text1", "This is text1 sent from MainActivity at " + new Date()); myIntent.putExtra("text2", "This is text2 sent from MainActivity at " + new Date()); // Yêu cầu chạy Example1Activity. MainActivity.this.startActivity(myIntent); } });
Code đầy đủ của MainActivity.java
package vn.aptech.androidbasic; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import java.util.Date; public class MainActivity extends AppCompatActivity { private Button button1; private Button button2; private Button button3; private Button button4; private Button button5; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Find Button by its ID this.button1 = (Button) this.findViewById(R.id.button1); // Find button by its ID this.button2 = (Button) this.findViewById(R.id.button2); // Find button by its ID. this.button3 = (Button) this.findViewById(R.id.button3); // Find button by its ID. this.button4 = (Button) this.findViewById(R.id.button4); // Find button by its ID. this.button5 = (Button) this.findViewById(R.id.button5); // Called when the user clicks the button1. button1.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // Create a Intent: // (This object contains content that will be sent to Example1Activity). Intent myIntent = new Intent(MainActivity.this, Example1Activity.class); // Put parameters myIntent.putExtra("text1", "This is text1 sent from MainActivity at " + new Date()); myIntent.putExtra("text2", "This is text2 sent from MainActivity at " + new Date()); // Start Example1Activity. MainActivity.this.startActivity(myIntent); } }); // Called when the user clicks the button2. button2.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // Create a Intent: // (This object contains content that will be sent to Example2Activity). Intent myIntent = new Intent(MainActivity.this, Example2Activity.class); // Start Example2Activity. MainActivity.this.startActivity(myIntent); } }); // Called when the user clicks the button3. button3.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // Create a Intent: // (This object contains content that will be sent to Example3Activity). Intent myIntent = new Intent(MainActivity.this, Example3Activity.class); MainActivity.this.startActivity(myIntent); } }); button4.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // Create a Intent: // (This object contains content that will be sent to Example4Activity). Intent myIntent = new Intent(MainActivity.this, Example4Activity.class); // Start Example4Activity. MainActivity.this.startActivity(myIntent); } }); button5.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // Create a Intent: // (This object contains content that will be sent to Example5Activity). Intent myIntent = new Intent(MainActivity.this, Example5Activity.class); // Start Example5Activity. MainActivity.this.startActivity(myIntent); } }); } }
Example1Activity – Gọi một Activity khác
Tiếp theo mở activity_example1.xml chúng ta sẽ thiết kế giao diện cho Example1Activity


Thiết lập các ràng buộc (constraint) cho các thành phần trên giao diện.


Đặt ID, Text cho các thành phần trên giao diện:

Viết code cho Example1Activity.java
package vn.aptech.androidbasic; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class Example1Activity extends AppCompatActivity { private Button buttonClickMe; private Button buttonBack; private TextView textView1; private TextView textView2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_example1); // Find TextView by its ID this.textView1 = (TextView) this.findViewById(R.id.textView1); // Find TextView by its ID this.textView2 = (TextView) this.findViewById(R.id.textView2); this.buttonClickMe = (Button) this.findViewById(R.id.button_clickMe); this.buttonBack = (Button) this.findViewById(R.id.button_back); // Get the intent sent from MainActivity. Intent intent = getIntent(); // Parameter in Intent, sent from MainActivity String value1 = intent.getStringExtra("text1"); // Parameter in Intent, sent from MainActivity String value2 = intent.getStringExtra("text2"); this.textView1.setText(value1); this.textView2.setText(value2); // When user click "Click me" button. this.buttonClickMe.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { textView2.setText("You click button"); } }); // When user long click "Click me" button. this.buttonClickMe.setOnLongClickListener(new Button.OnLongClickListener() { // return true if the callback consumed the long click, false otherwise. @Override public boolean onLongClick(View v) { textView2.setText("You long click button"); return true; } }); // When user click "Back" button. this.buttonBack.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // Back to previous Activity. Example1Activity.this.finish(); } }); } }