Git thực hành (1) - Cài đặt, tạo repo

1. Tổng quan về Git

1.1 Git là gì

Git là một hệ thống quản lý phiên bản phân tán (distributed version control system) được sử dụng rộng rãi trong phát triển phần mềm. Nó cho phép các nhóm lập trình viên theo dõi và quản lý các thay đổi trong mã nguồn của một dự án một cách hiệu quả.

Một số tính năng của Git

- Theo dõi lịch sử thay đổi: Git lưu lại từng thay đổi nhỏ nhất của mã nguồn, giúp bạn dễ dàng quay lại các phiên bản trước đó nếu cần

- Cộng tác hiệu quả: Git cho phép nhiều người cùng làm việc trên một dự án cùng một lúc, đồng thời hợp nhất các thay đổi một cách dễ dàng

- Phân nhánh và hợp nhất: Git hỗ trợ tạo nhiều nhánh (branch) làm việc độc lập, giúp bạn thử nghiệm các tính năng mới mà không ảnh hưởng đến phần còn lại của dự án

- Bảo mật: Git lưu trữ các thay đổi dưới dạng các bản ghi (commit) không thể thay đổi, đảm bảo tính toàn vẹn của mã nguồn

- Phân tán: mỗi bản sao của một kho lưu trữ Git đều là một kho lưu trữ đầy đủ, cho phép bạn làm việc không cần kết nối mạng và đồng bộ hóa sau đó (khi có kết nối mạng)

1.2 Tải và cài đặt Git

Do Git là một phần mềm, để sử dụng, bạn cần tải nó về máy, và thực hiện cài đặt như một phần mềm thông thường.

Vào trang https://git-scm.com/, chọn phiên bản phù hợp với hệ điều hành bạn đang dùng, để tải Git về máy.

Sau khi tải về máy, thực hiện cài đặt.

Để kiểm tra xem Git đã cài đặt thành công hay chưa? Hoặc để kiểm tra xem trên máy tính có phần mềm Git hay không:

- Bấm Phím cửa sổ + R để mở cửa sổ Run

- Gõ cmd > nhấn phím Enter để mở cửa sổ dòng lệnh (command line)

- Nhập lệnh git --version hoặc git -v

- Nếu xuất hiện thông tin về phiên bản của Git, có nghĩa là trên máy tính của bạn đã có phần mềm Git và bạn có thể sử dụng.

1.3 Nhúng Git vào dự án

Sử dụng File Explorer, tạo thư mục cho dự án. Ví dụ, trong ổ đĩa E:\, tạo thư mục dự án có tên là TeoShop.

Nhúng Git vào thư mục TeoShop

Nếu bạn muốn sử dụng Git để quản lý các phiên bản của dự án TeoShop thì bạn phải nhúng Git vào trong thư mục TeoShop.

Trước khi nhúng Git, bạn dùng File Explorer mở thư mục TeoShop ra để quan sát, bạn sẽ thấy TeoShop đang là thư mục rỗng.

Bạn có thể sử dụng Git bằng giao diện đồ họa, hoặc các chức năng của Git đã được tích hợp vào các phần mềm lập trình (ví dụ Visual Studio, Eclipse, VS code). Tuy nhiên, cách học Git hiệu quả nhất vẫn là sử dụng giao diện dòng lệnh. Giao diện dòng lệnh chứa đầy đủ nhất các lệnh của Git, khi đã hiểu được bản chất các lệnh rồi thì chuyển sang sử dụng trên các giao diện khác rất đơn giản.

- Trong cửa sổ dòng lệnh, di chuyển vào thư mục TeoShop. 

[Một vài lệnh hữu ích: gõ tên ổ đĩa, kèm dấu hai chấm (:) để chuyển ổ đĩa. Ví dụ, muốn chuyển qua ổ đĩa D sẽ nhập lệnh D: > nhấn phím Enter. Để di chuyển tới thư mục nào thì gõ lệnh cd tenthumuc. Để di chuyển lên thư mục cha: gõ hai dấu chấm (..). Để xem nội dung của một thư mục: dùng lệnh dir. Lệnh cd là viết tắt của change directory, lệnh dir là viết tắt của

directory.]

- Gõ lệnh git init

Chữ init viết tắt của initialize, nghĩa là khởi tạo.

- Nếu nhúng Git thành công, sẽ thấy thông báo “Initialized empty Git repository in E:/TeoShop/.git/’. Ý là: đã khởi tạo một kho chứa rỗng của Git trong thư mục E:/TeoShop/.git/”.

- Mở thư mục dự án ra để quan sát sự thay đổi. Bạn sẽ thấy xuất hiện thêm thư mục ẩn có tên là .git. Đây chính là kho chứa (kho lưu trữ) mà phần mềm Git thêm tạo ra trong thư mục dự án TeoShop. Git sẽ sử dụng thư mục này cho các tác vụ của nó. Bạn không nên thay đổi nội dung trong thư mục .git.

Kho chứa là nơi chứa toàn bộ lịch sử các thay đổi của dự án, từ những dòng mã đầu tiên cho đến các phiên bản mới nhất. Hãy tưởng tượng kho chứa như một "nhà kho" lưu trữ tất cả các "bản ghi" về sự phát triển của dự án.

[Nếu máy bạn không nhìn thấy thư mục ẩn: trong cửa sổ của File Explorer, chọn menu View > đánh dấu chọn vào mục Hidden items.]

Vậy là bạn đã nhúng được Git vào trong thư mục của dự án. Chúng ta sẽ sử dụng Git để quản lý mã nguồn bằng các lệnh cụ thể ở trong các phần tiếp theo.

1.4 Bài tập

1.1 Thực hành các cài đặt, các lệnh trong bài học.

1.2 Lệnh nào được sử dụng để nhúng Git vào thư mục dự án?

A. git init

B. git --init

C. git initialize

D. git embed

1.3 Lệnh nào sử dụng để kiểm tra trên máy tính đã có phần mềm Git hay chưa?

A. git ver

B. git version

C. git -v

D. git --ver

1.4 Trong Git, kho lưu trữ (repo, repository) là gì?

A. Là thư mục dự án

B. Là thư mục dự án đã được nhúng Git

C. Là thư mục cài đặt phần mềm Git

D. Là thư mục .git (trong thư mục dự án)

-----

Gợi ý làm bài tập

1.2(A), 1.3(C), 1.4(D)

-----

Cập nhật: 15/2/2025

-----

Bài sau:



CuTeoHocLamWeb (8): Thao các căn bản trên blogger

Bài trước: CuTeoHocLamWeb (7): Tạo một website cá nhân

-----

8. Thao các căn bản trên blogger

Sau bài học trước, bạn đã tạo được một website riêng. Tuy nhiên, khi mọi người truy cập vào sẽ không có nội dung. Chúng ta sẽ thêm các bài viết để tạo ra nội dung cho website.

Việc tạo ra nội dung cho website rất quan trọng, vì đây là thứ để một người ra quyết định là có truy cập vào website của bạn hay không? Nếu nội dung hữu ích, độc đáo, cuốn hút thì sẽ có người truy cập. Ở bài học trước, bạn có thể mất 5 phút để tạo ra website, nhưng để tạo ra nội dung hữu ích thì phải mất nhiều tháng, nhiều năm để làm.

8.1 Giao diện quản trị và hiển thị

Blogger có 2 loại giao diện:

- Giao diện quản trị

- Giao diện hiển thị

Giao diện quản trị

Giao diện quản trị là giao diện dùng cho người quản trị, nó cung cấp các nút, các công cụ để bạn tạo ra nội dung cho website, chỉnh sửa giao diện, màu sắc của website. Bạn là người tạo ra website, đã đăng nhập vào hệ thống blogger, nên bạn sẽ thấy được giao diện quản trị. Người dùng thông thường (người duyệt web) sẽ không thể thấy giao diện quản trị. Xem hình ví dụ về giao diện quản trị:

Trong giao diện quản trị:

- Đường dẫn trên thanh địa chỉ của trình duyệt sẽ có dạng: https://www.blogger.com/u/1/blog/posts/9000730924806390804

- Ở khung bên trái, sẽ có các công cụ để bạn tạo bài viết, cấu hình website

- NEW POST: để tạo một bài viết cho website

- Posts: để quản lý (liệt kê, thêm, xóa, sửa) các bài viết

- Stats: để xem số lượt truy cập website, theo ngày, theo tháng; tổng số lượt truy cập, số lượt truy cập mỗi bài viết

- Pages: để tạo trang web

- Layout: để thêm, xóa, sửa các thành phần trên giao diện trang web

- Theme: thay đổi kiểu dáng, phong cách hiển thị tổng thể của website

- Settings: thực hiện các thiết lập, cài đặt cho website

- View blog: chuyển sang giao diện hiển thị (xem website ở chế độ người dùng)

Giao diện hiển thị

Giao diện hiển thị là giao diện khi người dùng (không phải người quản trị) truy cập vào website.

Xem hình minh họa:

- Đường dẫn trên thanh địa chỉ là địa chỉ của website, ví dụ: nguyenvanteodalat.blogspot.com

- Người dùng sẽ đọc được các bài viết mà bạn đã tạo ở giao diện quản trị

8.2 Tạo bài viết cho website

Để tạo bài viết (tiếng Anh gọi là post) cho website, bạn phải đăng nhập vào blogger, để vào được giao diện quản trị.

Bạn có thể tạo các bài viết với số lượng không giới hạn, càng nhiều bài viết hữu ích thì website của bạn càng có giá trị, càng thu hút được nhiều người đọc.

Để tạo ra bài viết, trên giao diện quản trị, chọn NEW POST.

Giao diện tạo một bài viết xuất hiện:

Để tạo một bài viết, bạn làm như sau:

- Nhập tên cho bài viết ở mục Title [1]

- Sử dụng các chức năng ở thanh công cụ để soạn thảo nội dung bài viết, gồm một số chức năng soạn thảo văn bản đơn giản [2]

- Vùng soạn thảo nội dung của bài viết [3], bạn sẽ nhập tiêu đề, văn bản; chèn bảng, hình, video. Hoặc bạn có thể chép (copy) nội dung trong Microsoft Word và dán (paste) vào đây.

- Sau khi soạn nội dung xong, bạn bấm vào nút Publish (xuất bản) để chính thức tạo ra một bài viết mới, bài viết này sẽ hiển thị lên giao diện của người dùng.

Kinh nghiệm thực tế: bạn nên tạo nội dung bằng công cụ Google Docs hoặc Microsoft Word, sau đó chép nội dung vào cửa sổ soạn thảo của Blogger.

Bạn vẫn có thể chỉnh sửa lại bài viết sau khi đã xuất bản. Cách thực hiện: vào giao diện quản trị > chọn mục Posts > chọn bài viết muốn chỉnh sửa > thực hiện chỉnh sửa > bấm nút Update để cập nhật nội dung.

8.3 Bài tập

Bài 1. Tạo bài viết, có tiêu đề là Núi Langbiang với nội dung như sau:

Khi người dùng bấm vào chữ Đà Lạt, sẽ chuyển sang bài viết có tên là Đà Lạt. Nội dung của bài viết Đà Lạt như sau:

Khi người dùng bấm vào chữ Alexandre Yersin, sẽ chuyển sang bài viết có tên là Alexandre Yersin. Nội dung của bài viết Alexandre như sau:


Bài 2. Bạn tự tạo ra một loạt bài viết (hoặc bài học) về một chủ đề bất kì. Loạt bài có ít nhất 03 bài viết, yêu cầu mỗi bài viết:

- Có chủ đề

- Bài viết phải có các đề mục cấp 1 (heading 1), cấp 2 (heading 2), nội dung văn bản, hình ảnh.

- Độ dài: ít nhất 2000 từ

- Đầu bài viết có liên kết tới bài trước, cuối bài viết có liên kết tới bài sau. Xem mẫu: https://legiacong.blogspot.com/2024/12/cuteohoclamweb-7-tao-mot-website-ca-nhan.html

-----

Cập nhật: 5/2/2025

Bài sau: 




Lập trình Android bằng Java (4): Activity và intent

Bài trước: Lập trình Android bằng Java (3): Làm quen với một số điều khiển

-----

4. Activity và intent

Trong các bài học trước, bạn đã làm quen với activity bằng cách tạo và lập trình xử lý activity có tên là MainActivity. Hiểu đơn giản activity là một màn hình giao diện. Trong phần này chúng ta sẽ tìm hiểu thêm về activity.

4.1 Activity là gì?

Activity là điểm vào (entry point) của ứng dụng, giúp người dùng tương tác với ứng dụng, nó có giao diện là một màn hình đơn nhất. Như chúng ta đã làm quen với activity có tên là MainActivity, nó gồm lớp xử lý tương tác với người dùng MainActivity.java và giao diện activity_main.xml.

Một ứng dụng thường gồm nhiều activity, các activity có thể gọi lẫn nhau. Trong đó, có một activity được chỉ định là main activity, nó sẽ được gọi khi người dùng khởi chạy ứng dụng. Sau đó, main activity sẽ gọi các activity khác để thực hiện các công việc cụ thể. Ví dụ, ứng dụng email có thể gồm activity để hiển thị danh sách email mới (main activity), activity để soạn email, và activity để đọc một email.

Trong một ứng dụng, mặc dù các activity được kết hợp để làm việc chung với nhau, tạo thành một ứng dụng hoàn chỉnh, nhưng các activity là độc lập với nhau.

Một ứng dụng có thể gọi activity của một ứng dụng khác. Ví dụ, ứng dụng camera có thể gọi activity của ứng dụng email, để gửi một bức ảnh qua email.

Trải nghiệm trên ứng dụng di động khác với trải nghiệm trên ứng dụng desktop ở chỗ: tương tác của người dùng với ứng dụng không phải lúc nào cũng bắt đầu ở cùng một nơi (một giao diện, màn hình). Thay vào đó, hành trình của người dùng có thể bắt đầu bằng một giao diện không xác định trước. Ví dụ, nếu bạn mở ứng dụng email từ màn hình chính, bạn sẽ thấy danh sách email mới. Tuy nhiên, nếu bạn đang sử dụng ứng dụng camera, sau đó khởi chạy ứng dụng email, thì bạn lại thấy màn hình để soạn email.

Để sử dụng activity, bạn phải đăng ký trong manifest và cần quản lý vòng đời của activity một cách phù hợp.

4.2 Đăng ký activity trong manifest

Ứng dụng muốn sử dụng activity thì cần phải khai báo trong tập tin AndroidManifest.xml.

Sử dụng phần tử <activity> để khai báo một activity, kèm theo một số thuộc tính. Phần tử <activity> là con (nằm trong) phần tử <application>.

<manifest ... >

<application ... >

<activity android:name=".ExampleActivity" />

           

</application ... >

      ...

</manifest >

 

Thuộc tính bắt buộc phải có trong phần tử <activity> là android:name, cho biết tên lớp xử lý cho activity. Bạn cũng có thể sử dụng thêm các thuộc tính khác để định nghĩa icon, label, UI theme cho activity.

4.3 Tạo điện thoại giả lập bằng LDPlayer

Sau khi chạy một số ứng dụng đơn giản, nhận thấy phần mềm máy ảo Emulator đính kèm với Android Studio chạy không ổn định. Quá trình khởi động và chạy điện thoại giả lập mất nhiều thời gian. Có nhiều thời điểm, khi bấm nút Run app trên Android Studio, mở Task Manager để kiểm tra, thấy RAM 16GB mà bị sử dụng trên 97%, truy cập đĩa cứng luôn là 100%.

Nếu máy của bạn cũng gặp tình trạng trên, thì có thể nghĩ tới việc dùng phần mềm khác để tạo điện thoại giả lập thay thế cho Emulator.

Lên mạng để tìm kiếm các phần mềm giả lập điện thoại miễn phí, chọn một phần mềm mà bạn muốn.

Ví dụ, bạn có thể thử phần mềm LDPlayer. Vào trang web https://vi.ldplayer.net/ để tải phần mềm về máy, thực hiện cài đặt như một phần mềm thông thường.

Sau khi cài đặt xong, bạn chạy LDPlayer, giao diện mặc định là tiếng Việt, bấm vào nút Cài đặt, để thực hiện một số cấu hình.

- Để chọn cấu hình cho điện thoại: Cài đặt > Cao cấp > Di động > 1080x1920(dpi 480)

- Để chọn kiểu kết nối cho Android Studio: Cài đặt > Khác > mục Debug ADB, chọn Bật kết nối local.

- Bấm nút Lưu, LDPlayer sẽ khởi động lại để ghi nhận các cấu hình vừa được thiết lập

Sau khi cài đặt, cấu hình, và chạy LDPlayer, Android Studio sẽ tự nhận điện thoại giả lập.


Bạn đã có thể lập trình trên Android Studio và xuất kết quả trên điện thoại giả lập vừa tạo (samsung SM-G977N).

Bạn có thể vào lại Task Manager để kiểm tra tình trạng sử dụng RAM và truy cập đĩa cứng, sẽ thấy hệ thống chạy ổn định và tốn ít tài nguyên hơn.

4.4 Thêm activity cho ứng dụng

Để học nhanh, học được nhiều, làm được nhiều, cách đơn giản nhất là đọc thật nhiều; xem hướng dẫn, thực hành thật nhiều; xâu chuỗi kiến thức thật nhiều, và viết lại để hệ thống kiến thức thật nhiều. Nói chung là chăm chỉ tìm hiểu, thực hành, và làm việc.

Ở các phần trước, chúng ta đã tạo ra 2 ứng dụng riêng lẻ: HelloWorld và Register. Phần này, chúng ta sẽ tạo ra một ứng dụng gồm 3 activity: MainActivity, HelloActivity và RegisterActivity. MainActivity gồm 2 nút (HelloWorld, Register), bấm vào 2 nút sẽ gọi HelloActivity và RegisterActivity tương ứng.

Thực hiện:

- Tạo dự án mới, New Project > Empty Views Activity > đặt tên TeoApp > Finish.

- Thiết kế giao diện cho activity_main.xml, gồm 2 nút HelloWorld và Register

[activity_main.xml]

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

   xmlns:app="http://schemas.android.com/apk/res-auto"

   xmlns:tools="http://schemas.android.com/tools"

   android:id="@+id/main"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   tools:context=".MainActivity">

 

   <Button

       android:id="@+id/btnHelloWorld"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:layout_marginTop="228dp"

       android:onClick="onBtnHelloClick"

       android:text="HelloWorld"

       app:layout_constraintEnd_toEndOf="parent"

       app:layout_constraintStart_toStartOf="parent"

       app:layout_constraintTop_toTopOf="parent" />

 

   <Button

       android:id="@+id/btnRegister"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:layout_marginTop="80dp"

       android:onClick="onBtnRegisterClick"

       android:text="Register"

       app:layout_constraintEnd_toEndOf="parent"

       app:layout_constraintStart_toStartOf="parent"

       app:layout_constraintTop_toBottomOf="@+id/btnHelloWorld" />

</androidx.constraintlayout.widget.ConstraintLayout>

 Giao diện của main activity:


- Thêm 2 activity, có tên là HelloActivity và RegisterActivity: trong giao diện Android Studio > khung Project app > chuột phải vào thư mục java > New > Activity > Empty Views Activity > đặt tên HelloActivity; làm tương tự cho RegisterActivity.

Như đề cập, một activity muốn hoạt động phải được đăng ký trong manifest. Bạn mở tập tin AndroidManifest.xml để kiểm tra sẽ thấy Android Studio đã tự động thêm 2 khai báo cho 2 activity chúng ta vừa thêm vào ứng dụng.

[AndroidManifest.xml]

...

<activity

   android:name=".RegisterActivity"

   android:exported="false" />

<activity

   android:name=".HelloActivity"

   android:exported="false" />

...

Thuộc tính name cho biết lớp java chứa mã xử lý cho activity: 

android:name=".RegisterActivity"

android:name=".HelloActivity"

Khi bạn thêm một activity, ngoài việc đăng ký trong manifest, 2 tập tin khác cũng được tạo ra là tập tin xử lý (.java) và tập tin chứa mã giao diện (.xml).

- HelloActivity: HelloActivity.java, activity_hello.xml

- RegisterActivity: RegisterActivity.java, activity_register.xml

Xem hình minh họa:

-----

Cập nhật: 4/2/2025

-----

Bài sau: 

Lập trình Android bằng Java (3): Làm quen với một số điều khiển

Bài trước: Lập trình Android bằng Java (2): Chương trình đầu tiên

-----

3. Làm quen với một số điều khiển

3.1 Thêm điều khiển cho giao diện

Ở bài học trước, chúng ta đã biết:

- Khi khởi chạy một ứng dụng, hệ điều hành Android sẽ đọc và thực thi nội dung của AndroidManifest.xml

- Dựa vào chỉ dẫn trong AndroidManifest.xml, Android sẽ đọc và thực thi mã nguồn trong MainActivity.java

- Mã nguồn trong MainActivity.java sẽ nạp giao diện từ activity_main.xml

Xem hình minh họa:

Chúng ta sẽ thêm một số điều khiển (nhãn, ô nhập văn bản, nút) cho màn hình MainActivity, bằng cách thiết kế, chỉnh sửa trên tập tin activity_main.xml.

- Trong giao diện Android Studio, mở tập tin activity_main.xml > giao diện thiết kế của activity_main.xml sẽ xuất hiện

- Khung Palette: (bên trái) gồm các điều khiển, muốn thêm điều khiển cho giao diện, chọn một điều khiển, kéo thả vào cửa sổ giao diện (vùng giữa)

- Cửa sổ giao diện: (vùng giữa) chứa giao diện đang được thiết kế

- Khung chuyển chế độ xem: (phía trên, bên phải) cho phép bạn xem activity_main.xml ở chế độ thiết kế (design), chế độ mã nguồn (code) hoặc cả hai

- Khung Attributes: (bên phải) cho phép thiết lập các thuộc tính cho đối tượng thiết kế

Thêm các điều khiển cho giao diện:

TextView

- id: txtXinChao

Cách làm: ở cửa sổ giao diện, chọn TextView chúng ta đã tạo ở bài học trước, có nội dung “chao bac Teo!”, hoặc bạn có thể kéo thả một TextView mới > Khung Attributes, mục id, thêm nội dung txtXinChao. Nội dung trong id là tên duy nhất của TextView trong ứng dụng, chúng ta sẽ tham chiếu (truy cập) tới TextView thông qua id. Có nhiều quy tắc đặt tên cho id, ví dụ phần đầu txt là viết tắt của TextView, phần sau XinChao là tên của TextView.

Button

- id: btnChao

- text: Chào

Cách làm: kéo một Button từ Palette thả vào cửa sổ giao diện. Điền thông tin btnChao vào thuộc tính id; điền chữ Chào vào thuộc tính text.

Plain Text

- id: editTxtTen

- text: (để trắng)

- hint: Nhập tên

Cách làm: kéo một Plain Text từ Palette thả vào cửa sổ giao diện. Điền thông tin editTxtTen vào thuộc tính id; thuộc tính text để trắng, thuộc tính hint điền Nhập tên.

Kết quả giao diện sẽ như sau:

- Bấm nút Run app để chạy ứng dụng, bạn sẽ thấy các điều khiển xuất hiện trên màn hình điện thoại, tuy nhiên vị trí của chúng bị xáo trộn. Nguyên nhân là do chúng ta chưa neo (anchor) các điều khiển với nhau, và neo vào màn hình.

- Bấm chuột vào điều khiển, sẽ xuất hiện 4 nút chấm tròn ở đường viền, bạn bấm vào nút chấm tròn, giữ và kéo về cạnh của điện thoại, sẽ xuất hiện mũi tên để bạn neo vào cạnh của điện thoại. Thực hiện neo điều khiển về 2 phía của điện thoại, và neo vào điều khiển phía trên. Xem hình minh họa.


- Bấm nút Run app để chạy lại ứng dụng, bạn sẽ thấy các điều khiển đã được cố định.

3.2 Viết mã xử lý cho các điều khiển

Với giao diện đã thiết kế, chúng ta sẽ viết mã Java để xử lý như sau:

- Cho người dùng nhập tên vào ô Nhập tên

- Khi người dùng bấm nút Chào, sẽ lấy chuỗi trong ô Nhập tên hiển thị trên ô “chao bac Teo!, thay đổi chuỗi hiển thị thành chao bac [chuỗi]!. Ví dụ, người dùng nhập chữ vào ô Nhập tên, thì sẽ xuất chuỗi chao bac Tí!.

Thực hiện:

- Mở tập tin activity_main.xml ở chế độ lập trình (Code), trong phần tử Button, thêm thuộc tính lắng nghe sự kiện click (onClick), hàm xử lý cho sự kiện click là onBtnClick.

[activity_main.xml]

<Button

   

   app:layout_constraintStart_toStartOf="parent"

   app:layout_constraintTop_toBottomOf="@+id/editTxtTen"

   android:onClick="onBtnClick"/>

- Trong tập tin MainActivity.java, phần import, thêm 2 thư viện: 

import android.widget.TextView;

import android.widget.EditText;

- Trong tập tin MainActivity.java, lớp MainActivity, thêm hàm onBtnClick:  

public class MainActivity extends AppCompatActivity {

protected void onCreate(Bundle savedInstanceState) { 

……

}

public void onBtnClick(View view) {

  // tạo biến tham chiếu tới chuỗi hiển thị, sử dụng lớp R

  TextView txtXinChao =  findViewById(R.id.txtXinChao);

  // tạo biến tham chiếu tới ô nhập liệu

   EditText editTxtTen = findViewById(R.id.editTxtTen);

   // lấy tên lưu vào chuỗi ten

   String ten = editTxtTen.getText().toString();

   // hiển thị câu chào

   txtXinChao.setText("chao bac " + ten + "!");

}

}

- Bấm nút Run app để chạy ứng dụng, nhập tên và bấm nút Chào để xem kết quả. Xem hình minh họa.

3.3 Tạo màn hình Register

Chúng ta cùng làm một màn hình Register đơn giản, để luyện tập một số kĩ năng thiết kế và xử lý các điều khiển.

Màn hình Register gồm:

- 3 ô nhập văn bản, để người dùng nhập First Name, Last Name và Email

- 1 nút REGISTER

- 3 nhãn (text view) để hiển thị First Name, Last Name và Email (sau khi người dùng nhập thông tin và bấm nút REGISTER)

Thực hiện:

- Trong giao diện của Android Studio, vào menu File > Close Project để đóng dự án đang mở (nếu có dự án đang mở)

- Tạo dự án mới: New Project > Phone and Tablet > Empty Views Activity > đặt tên cho dự án là Register.

- Thiết kế giao diện: mở tập tin activity_main.xml, xóa TextView HelloWorld, thêm 3 ô nhập liệu (Plain Text), 1 nút (Button), 3 nhãn (TextView)

TextView First Name

- id: editTxtFirstName

- hint: First Name

- text: (empty)

TextView Last Name

- id: editTxtLastName

- hint: Last Name

- text: (empty)

TextView Last Name

- id: editTxtEmail

- hint: Email

- text: (empty)

Button REGISTER

- id: btnRegister

- text: REGISTER

- onClick: onBtnRegisterClick

TextView First Name

- id: txtFirstName

- text: First Name

TextView Last Name

- id: txtLastName

- text: Last Name

Neo (constraint) TextView First Name vào 2 cạnh màn hình điện thoại, margin top 100. Các điều khiển còn lại neo 2  bên, và neo phía trên lên điều khiển kề trên, margin top 25.

[activity_main.xml (design)]


[activity_main.xml (code)]

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

   xmlns:app="http://schemas.android.com/apk/res-auto"

   xmlns:tools="http://schemas.android.com/tools"

   android:id="@+id/main"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   tools:context=".MainActivity">

 

   <EditText

       android:id="@+id/editTxtFirstName"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:layout_marginTop="100dp"

       android:ems="10"

       android:hint="First Name"

       android:inputType="text"

       app:layout_constraintEnd_toEndOf="parent"

       app:layout_constraintStart_toStartOf="parent"

       app:layout_constraintTop_toTopOf="parent" />

 

   <EditText

       android:id="@+id/editTxtLastName"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:layout_marginTop="25dp"

       android:ems="10"

       android:hint="Last Name"

       android:inputType="text"

       app:layout_constraintEnd_toEndOf="@+id/editTxtFirstName"

       app:layout_constraintStart_toStartOf="@+id/editTxtFirstName"

       app:layout_constraintTop_toBottomOf="@+id/editTxtFirstName" />

 

   <EditText

       android:id="@+id/editTxtEmail"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:layout_marginTop="25dp"

       android:ems="10"

       android:hint="Email"

       android:inputType="text"

       app:layout_constraintEnd_toEndOf="@+id/editTxtLastName"

       app:layout_constraintStart_toStartOf="@+id/editTxtLastName"

       app:layout_constraintTop_toBottomOf="@+id/editTxtLastName" />

 

   <Button

       android:id="@+id/btnRegister"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:layout_marginTop="25dp"

       android:onClick="onBtnRegisterClick"

       android:text="REGISTER"

       app:layout_constraintEnd_toEndOf="@+id/editTxtEmail"

       app:layout_constraintStart_toStartOf="@+id/editTxtEmail"

       app:layout_constraintTop_toBottomOf="@+id/editTxtEmail" />

 

   <TextView

       android:id="@+id/txtFirstName"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:layout_marginTop="25dp"

       android:text="First Name"

       app:layout_constraintEnd_toEndOf="@+id/btnRegister"

       app:layout_constraintStart_toStartOf="@+id/btnRegister"

       app:layout_constraintTop_toBottomOf="@+id/btnRegister" />

 

   <TextView

       android:id="@+id/txtLastName"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:layout_marginTop="25dp"

       android:text="Last Name"

       app:layout_constraintEnd_toEndOf="@+id/txtFirstName"

       app:layout_constraintStart_toStartOf="@+id/txtFirstName"

       app:layout_constraintTop_toBottomOf="@+id/txtFirstName" />

 

   <TextView

       android:id="@+id/txtEmail"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:layout_marginTop="25dp"

       android:text="Email"

       app:layout_constraintEnd_toEndOf="@+id/txtLastName"

       app:layout_constraintStart_toStartOf="@+id/txtLastName"

       app:layout_constraintTop_toBottomOf="@+id/txtLastName" />

</androidx.constraintlayout.widget.ConstraintLayout>

Trong MainActivity.java, viết hàm onBtnRegisterClick:

public void onBtnRegisterClick(View view) {

   TextView txtFirstName = findViewById(R.id.txtFirstName);

   TextView txtLastName = findViewById(R.id.txtLastName);

   TextView txtEmail = findViewById(R.id.txtEmail);

 

   EditText edtTxtFirstName = findViewById(R.id.editTxtFirstName);

   EditText edtTxtLastName = findViewById(R.id.editTxtLastName);

   EditText edtTxtEmail = findViewById(R.id.editTxtEmail);

 

   txtFirstName.setText("First Name: " + edtTxtFirstName.getText().toString());

   txtLastName.setText("Last Name: " + edtTxtLastName.getText().toString());

   txtEmail.setText("Email: " + edtTxtEmail.getText().toString());

}

Bấm Run app để xem kết quả:

3.4 Bài tập

1. Thuộc tính id của một điều khiển dùng để làm gì? Phát biểu nào không đúng?

A. Là giá trị sẽ được hiển thị lên giao diện của điều khiển  

B. Là tên duy nhất của một điều khiển trong ứng dụng

C. Được sử dụng để tham chiếu tới điều khiển khi lập trình xử lý

D. Nên học cách đặt tên cho id theo chuẩn, để việc lập trình dễ dàng và chuyên nghiệp

2. Điều khiển nào để tạo ra ô nhập liệu? Phát biểu nào đúng?

A. Button

B. TextView

C. Plain Text

D. Palette

3. Làm lại các ví dụ trong bài học.

---

Gợi ý làm bài tập

1(A), 2(C)

-----

Cập nhật: 23/1/2025

-----

Bài sau: Lập trình Android bằng Java (4): Activity và intent