1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng ứng dụng đồng bộ danh bạ điện thoại trên Android.

57 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Xây Dựng Ứng Dụng Đồng Bộ Danh Bạ Điện Thoại Trên Android
Tác giả Phạm Thanh Tịnh
Người hướng dẫn Th.S Lê Văn Mỹ
Trường học Đại học Đà Nẵng
Chuyên ngành Khoa Tin Học
Thể loại Khoá Luận Tốt Nghiệp
Năm xuất bản 2015
Thành phố Đà Nẵng
Định dạng
Số trang 57
Dung lượng 1,85 MB

Cấu trúc

  • 1. LÝ DO CHỌN ĐỀ TÀI (10)
  • 2. MỤC TIÊU VÀ NHIỆM VỤ (10)
  • 3. ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU (10)
  • 4. PHƯƠNG PHÁP NHIÊN CỨU (0)
  • 5. Ý NGHĨA THỰC TIỂN (10)
  • 6. BỐ CỤC LUẬN VĂN (10)
  • CHƯƠNG 1: CƠ SỞ LÝ THUYẾT (10)
    • 1.1. KHÁI NIỆM (12)
    • 1.2. KIẾN TRÚC CỦA NỀN TÁNG ANDROID (0)
      • 1.2.1. Kiến trúc tổng quát (13)
      • 1.2.2. Hệ điều hành (13)
      • 1.2.3. Thư viện và các giao diện lập trình ứng dụng (13)
      • 1.2.4. Android runtime (14)
      • 1.2.5. Bộ thư viện (14)
      • 1.2.6. Khung ứng dụng trên Android (16)
      • 1.2.7. Ứng dụng (16)
    • 1.3. CÁC THÀNH PHẦN CỦA ỨNG DỤNG (17)
      • 1.3.1. Hoạt động (Activity) (17)
        • 1.3.1.1. Khái niệm (17)
        • 1.3.1.2. Vòng đời của hoạt động (17)
      • 1.3.2. Service (20)
        • 1.3.2.1. Khái niệm (20)
        • 1.3.2.2. Vòng đời của một dịch vụ (20)
      • 1.3.3. Bộ nhận quảng bá (Broadcast receivers) (21)
        • 1.3.3.1. Khái niệm (21)
        • 1.3.3.2. Content provider (22)
        • 1.3.3.3. Các thành phần kích hoạt (Các Intent) (22)
    • 1.4. CÁC THÀNH PHẦN GIAO DIỆN ANDROID (26)
      • 1.4.1. View (26)
      • 1.4.2. ViewGroup (27)
      • 1.4.3. LinnerLayout (27)
      • 1.4.4. FrameLayout (28)
      • 1.4.5. AbsoluteLayout (28)
      • 1.4.6. RetaliveLayout (28)
      • 1.4.7. TableLayout (29)
      • 1.4.8. Button (29)
      • 1.4.9. ImageButton (30)
      • 1.4.10. ImageView (31)
      • 1.4.11. ListView (31)
      • 1.4.12. TextView (32)
      • 1.4.13. EditText (32)
      • 1.4.14. CheckBox (33)
    • 1.5. CÔNG CỤ HỖ TRỢ LẬP TRÌNH ANDROID (33)
  • CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ CHƯƠNG TRÌNH (10)
    • 2.1. PHÂN TÍCH YÊU CẦU CỦA ỨNG DỤNG (35)
      • 2.1.1. Mục đích của ứng dụng (35)
      • 2.1.2. Các chức năng chính và sẽ phát triển (35)
      • 2.1.3. Các chức năng khác sẽ phát triển (35)
    • 2.2. PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG (36)
      • 2.2.1. Sơ đồ UseCase (36)
      • 2.2.2. Cơ sở dữ liệu MYSQL (37)
      • 2.2.3. Các biểu đồ chức năng (39)
        • 2.2.3.1. Biểu đồ Class ItemContact (39)
        • 2.2.3.2. Biểu đồ Class ContactListPhone, ContactListServicePhone (39)
        • 2.2.3.3. Biểu đồ WebService (40)
        • 2.2.3.4. Biểu đồ đăng nhập (40)
        • 2.2.3.8. Biểu đồ sao lưu danh bạ (43)
        • 2.2.3.9. Biểu đồ thay đổi mật khẩu (44)
  • CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH VÀ DEMO (11)
    • 3.1. ĐĂNG NHẬP/ĐĂNG KÝ/LẤY LẠI MẬT KHẨU (45)
    • 3.2. DANH SÁCH CÁC CHỨC NĂNG (48)
    • 3.3. CHỨC NĂNG ĐỌC, XEM DANH BẠ (49)
    • 3.4. SAO LƯU DANH BẠ (50)
    • 3.5. THÊM DANH BẠ MỚI (51)
    • 3.6. MÀN HÌNH CHỜ (52)
    • 3.7. MÀN HÌNH DANH BẠ YÊU THÍCH (53)
    • 3.8. MÀN HÌNH THAY ĐỔI MẬT KHẨU (54)
  • CHƯƠNG 4: KẾT LUẬN (11)
    • 4.1. KẾT QUẢ ĐẠT ĐƯỢC (55)
    • 4.2. CÁC VẤN ĐỀ CHƯA GIẢI QUYẾT (55)
    • 4.3. HƯỚNG PHÁT TRIỂN (55)
  • TÀI LIỆU THAM KHẢO (56)

Nội dung

MỤC TIÊU VÀ NHIỆM VỤ

Ứng dụng cung cấp cho người dùng các chức năng lưu giữ danh bạ một cách hợp lý, giúp họ dễ dàng ghi nhớ và truy cập danh bạ trên bất kỳ thiết bị Android nào Dự án được phát triển trong hai tháng, chia thành nhiều giai đoạn, mỗi giai đoạn hoàn thành một chức năng cụ thể Giao diện được thiết kế đơn giản, hướng đến trải nghiệm người dùng tốt nhất.

Ý NGHĨA THỰC TIỂN

Giải quyết vấn đề mất số điện thoại hoặc quên mang theo điện thoại, người dùng có thể dễ dàng lấy số điện thoại cần thiết từ một máy khác mà không cần mở điện thoại của mình.

CƠ SỞ LÝ THUYẾT

KHÁI NIỆM

Hình 1.1: Điện thoại Android, HTC Dream (trái) và HTC Magic (phải)

Android được phát triển bởi tập đoàn Google, phiên bản đầu tiên ra đời năm

Kể từ năm 2008, Android đã nhanh chóng thu hút sự quan tâm của cộng đồng lập trình viên di động nhờ vào nền tảng mở và bộ thư viện đa năng, mạnh mẽ Nền tảng này tích hợp nhiều tính năng nổi bật, tạo điều kiện thuận lợi cho việc phát triển ứng dụng.

Android là hệ điều hành dựa trên Linux, có khả năng tương tác với phần cứng, quản lý bộ nhớ và điều khiển các tiến trình, tối ưu hóa hiệu suất cho thiết bị di động.

- Bộ ứng dụng khung cho phép sử dụng lại và thay thế các thành phần riêng lẻ

- Máy ảo Dalvik được tối ưu cho các thiết bị di động, chạy các ứng dụng lập trình trên ngôn ngữ Java

- Các thư viện cho phát triển ứng dụng mã nguồn mở bao gồm SQLite, WebKit, OpenGL và trình quản lý đa phương tiện

- Hỗ trợ các chuẩn đa phương tiện phổ biến, thoại trên nền GSM, Bluetooth EDGE, 3G và Wifi

- Hỗ trợ Camera, GPS, la bàn, máy đo gia tốc…

- Bộ phát triển ứng dụng SDK đầy đủ gồm thiết bị giả lập, công cụ sửa lỗi, tích

KIẾN TRÚC CỦA NỀN TÁNG ANDROID

1.2 KIẾN TRÚC CỦA NỀN TẢNG ANDROID

Android bao gồm bốn thành phần sau:

 Thư viện và các giao diện lập trình ứng dụng

Hình 1.2: Nhân Linux trên Android

Android sử dụng nhân Linux 2.6 để cung cấp các dịch vụ hệ thống quan trọng như bảo mật, quản lý bộ nhớ và quản lý tiến trình Nhân này hỗ trợ xử lý đa luồng và ngăn xếp mạng, đồng thời đảm nhận vai trò trình điều khiển thiết bị cho các giao tiếp như USB và hồng ngoại Ngoài ra, nhân Linux còn hoạt động như một lớp trừu tượng giữa phần cứng và phần mềm, giúp tối ưu hóa hiệu suất của hệ điều hành.

1.2.3 Thư viện và các giao diện lập trình ứng dụng

Android cung cấp một thư viện phong phú cho lập trình viên sử dụng, giúp tối ưu hóa quy trình phát triển ứng dụng Dưới đây là sơ đồ tóm tắt về hệ thống thư viện của Android.

Hình 1.3: Thư viện lâp trình ứng dụng trên Android

Android sở hữu một bộ thư viện cốt lõi, cung cấp hầu hết các chức năng có sẵn trong thư viện cốt lõi của ngôn ngữ lập trình Java Hệ thống Android Runtime bao gồm máy ảo Dalvik cùng với các thư viện Android, tạo nền tảng vững chắc cho việc phát triển ứng dụng.

Các thư viện cơ bản của Android cung cấp nhiều chức năng tương tự như thư viện cơ bản của Java, mặc dù ứng dụng Android được phát triển trong môi trường Java và Dalvik không phải là một Java VM.

Máy ảo Dalvik là nền tảng cho phép chạy ứng dụng trên hệ điều hành Android, được tối ưu hóa để hỗ trợ nhiều Instance hoạt động hiệu quả Nó sử dụng nhân Linux để thực hiện đa luồng và quản lý bộ nhớ ở mức thấp.

Android cung cấp nhiều API cho việc phát triển ứng dụng, trong đó có một danh sách các API cơ bản được hỗ trợ trên tất cả các thiết bị chạy nền tảng Android.

- Android.util: Gói tiện ích cơ bản bao gồm nhiều lớp mức thấp như là các lớp quản lý (List, Stack…) lớp xử lý chuỗi, lớp xử lý XML

- Android.os: Gói hệ điều hành cung cấp truy cập đến các dịch vụ cơ bản như là chuyển tin nhắn, thông tin chéo, đồng hồ và gỡ lỗi

- Android.graphics: Cung cấp các lớp đồ họa mức thấp thực hiện các chức năng đồ họa, màu, vẽ cơ bản

- Android.text: Công cụ hiển thị và xử lý văn bản

- Android.database: Cung cấp các lớp mức thất bắt buộc cho việc điều khiển cursor khi làm việc với các cơ sở dữ liệu

Android.content là một phần quan trọng trong lập trình ứng dụng, giúp quản lý truy cập dữ liệu và xuất bản thông qua việc cung cấp các dịch vụ thao tác với tài nguyên, bao gồm Content Provider và các gói.

Android.view: View là lớp cơ bản nhất trong giao diện người dùng, đóng vai trò quan trọng trong việc tạo ra các thành phần tương tác cho người dùng Mọi giao diện người dùng đều phải sử dụng tập hợp các View để đảm bảo tính năng và trải nghiệm người dùng tốt nhất.

Android.widget là gói được xây dựng dựa trên lớp View, cung cấp các thành phần giao diện người dùng sẵn có Các Widget trong gói này bao gồm danh sách, nút bấm, hộp nhập và nhiều kiểu trình bày (Layout), giúp dễ dàng tạo dựng giao diện người dùng cho ứng dụng.

Bộ API com.google.android.maps cung cấp quyền truy cập vào các điều khiển bản đồ có sẵn trong Android, cho phép các ứng dụng tương tác hiệu quả với bản đồ Nó bao gồm lớp MapView, Overlay và MapController, giúp người dùng dễ dàng tích hợp và quản lý bản đồ trong ứng dụng của mình.

Gói thư viện Android.app cung cấp truy cập đến dữ liệu của ứng dụng, bao gồm các thành phần cơ bản như lớp Activity và Service, thiết yếu cho mọi ứng dụng Android.

Android.provider cung cấp cho các nhà phát triển khả năng truy cập dễ dàng đến các Content Provider tiêu chuẩn, chẳng hạn như dữ liệu danh bạ Gói này bao gồm các lớp hỗ trợ truy cập vào cơ sở dữ liệu chuẩn trên tất cả các phiên bản Android.

Android.telephony cung cấp các API điện đàm cho phép tương tác trực tiếp với tầng điện thoại trên thiết bị, hỗ trợ việc tạo, nhận và theo dõi các cuộc gọi cùng với tình trạng cuộc gọi và tin nhắn SMS.

Gói Android.webkit cung cấp các API hữu ích cho việc xử lý nội dung web, bao gồm lớp WebView cho phép tạo giao diện web nhúng trong ứng dụng và trình quản lý cookie để quản lý dữ liệu.

* Cùng với các API của Android, còn có một tập các thư viện C/C++ như

 OpenGL: Thư viện dùng để tạo ra các đồ họa 3D dựa vào chuẩn OpenGLES 1.0 API

 FreeType: Hỗ trợ xử lý bitmap và font vector

 GGL: Thư viện cơ bản, dùng để cung cấp các engine đồ họa 2D

 Libc: Thư viện C chuẩn, được tối ưu cho các thiết bị Linux-based

 SQLite Engine: Cơ sở dữ liệu quan hệ gọn nhẹ, dùng để lưu trữ dữ liệu của ứng dụng

SSL Hỗ trợ sử dụng giao thức mã hóa Secure Sockets Layer trong bảo mật truyền thông Internet

1.2.6 Khung ứng dụng trên Android

Kiến trúc Android hỗ trợ việc tái sử dụng các thành phần, cho phép các ứng dụng công bố và chia sẻ Activity, Service và dữ liệu với nhau, đồng thời quản lý quyền truy cập thông qua các khai báo.

CÁC THÀNH PHẦN CỦA ỨNG DỤNG

Một ứng dụng trên Android được cấu thành từ bốn thành phần cơ bản sau:

Các thành phần không cần phải có mặt đầy đủ trong ứng dụng, và chúng ta có thể xác định các thành phần được sử dụng bằng cách xem khai báo trong file AndroidManifest.xml.

Một hoạt động trong ứng dụng Android là giao diện người dùng trực quan mà người dùng tương tác mỗi khi được kích hoạt Ứng dụng có thể bao gồm nhiều hoạt động, cho phép chúng gọi lẫn nhau Mỗi Activity kế thừa từ lớp android.app.Activity.

Mỗi hoạt động trong ứng dụng đều có một cửa sổ riêng để hiển thị nội dung, thường chiếm toàn bộ màn hình và có thể bao gồm các cửa sổ con như hộp thoại Nội dung của cửa sổ này được cung cấp bởi một hệ thống cấp bậc các View, là đối tượng của lớp Views.

1.3.1.2 Vòng đời của hoạt động

Hệ thống quản lý các hoạt động thông qua một cấu trúc dữ liệu ngăn xếp Khi một hoạt động được khởi tạo, nó sẽ được đẩy vào ngăn xếp và chuyển sang trạng thái thực thi, trong khi hoạt động trước đó sẽ chuyển sang trạng thái chờ Hoạt động này chỉ trở lại trạng thái kích hoạt khi hoạt động vừa khởi tạo hoàn tất Mỗi hoạt động có ba trạng thái chính.

 Active hoặc running: Nhận tương tác người dùng và bắt đầu hoạt động của ứng dụng

 Paused: Ứng dụng đã được tạm dừng nhưng vẫn hiển thị trước người dùng

Khi một activity bị che khuất hoàn toàn, nó sẽ chuyển sang trạng thái Stopped, nhưng vẫn lưu trữ đầy đủ thông tin trạng thái Trong trường hợp thiếu bộ nhớ, hệ thống thường sẽ đóng activity này lại.

When transitioning between states in an application, various callback functions are invoked to manage these transitions effectively These functions include `void onCreate(Bundle savedInstanceState)`, `void onStart()`, `void onRestart()`, `void onResume()`, `void onPause()`, `void onStop()`, and `void onDestroy()` Each of these callbacks plays a crucial role in the application's lifecycle management.

Biểu đồ mô tả vòng đời của một hoạt động, trong đó hình chữ nhật đại diện cho các phương thức Callback mà chúng ta có thể khai báo để thực hiện các thao tác khi hoạt động chuyển trạng thái Phương thức Callback là phương thức được gọi lại khi có sự kiện xảy ra Các trạng thái chính của hoạt động được thể hiện qua các hình viên thuốc.

Hình 1.6: Vòng đời của một hoạt động

Vòng đời của một hoạt động trong ứng dụng Android bắt đầu từ lời gọi đầu tiên đến phương thức onCreate(Bundle) và kết thúc khi phương thức onDestroy() được gọi Trong suốt quá trình này, hoạt động sẽ khởi tạo tất cả các tài nguyên cần thiết trong phương thức onCreate() và giải phóng chúng khi phương thức onDestroy() được thực thi, đảm bảo quản lý tài nguyên hiệu quả.

Thời gian sống của một hoạt động trong ứng dụng Android bắt đầu từ phương thức onStart() và kết thúc khi phương thức onStop() được thực thi Trong giai đoạn này, tất cả các tài nguyên của hoạt động vẫn được giữ lại, cho phép người dùng thấy giao diện nhưng không thể tương tác, vì hoạt động không ở trạng thái chạy tiền cảnh.

Thời gian sống tiền cảnh của một hoạt động bắt đầu khi phương thức onResume() được gọi và kết thúc khi phương thức onPause() được gọi Trong khoảng thời gian này, hoạt động hoạt động ở chế độ tiền cảnh và cho phép người dùng tương tác.

Dịch vụ (Service) trong Android là các đoạn mã được thực thi ngầm mà người dùng không thấy, mở rộng từ lớp cơ sở Service trong gói android.app Người dùng có thể kết nối hoặc kích hoạt dịch vụ thông qua interface mà dịch vụ cung cấp Ví dụ, trong một ứng dụng chơi nhạc, người dùng có thể duyệt danh sách bài hát và chọn bài để phát, trong khi chức năng chơi nhạc vẫn hoạt động khi chuyển sang cửa sổ khác, như soạn tin nhắn Để thực hiện điều này, ứng dụng sẽ khởi tạo dịch vụ bằng phương thức Context.startService().

Ứng dụng có thể dễ dàng kết nối với một dịch vụ đang chạy, hoặc khởi động dịch vụ nếu nó chưa hoạt động, thông qua phương thức Context.bindService() Dịch vụ này cung cấp cơ chế giao tiếp cho ứng dụng thông qua giao diện IBinder, cho phép thực hiện các thao tác như dừng hoặc chuyển bài trong dịch vụ chơi nhạc.

1.3.2.2 Vòng đời của một dịch vụ

Vòng đời của dịch vụ là quá trình từ khi dịch vụ được tạo ra cho đến khi bị loại bỏ khỏi hệ thống Dịch vụ có thể hoạt động trong hệ thống thông qua hai phương thức khác nhau.

Khi hệ thống gọi phương thức Context.startService(), dịch vụ sẽ được khởi động và thực hiện liên tục cho đến khi phương thức Context.stopService() được gọi để dừng dịch vụ.

Khi ứng dụng sử dụng phương thức Context.bindService() để kết nối với dịch vụ, dịch vụ sẽ được khởi tạo nếu chưa hoạt động Ứng dụng nhận một đối tượng IBinder từ dịch vụ, cho phép gọi các phương thức Callback để truy cập trạng thái của dịch vụ Nếu dịch vụ được khởi tạo qua Context.bindService(), nó sẽ tiếp tục hoạt động cho đến khi kết nối (đối tượng IBinder) không còn tồn tại.

Hình 1.7: Sơ đồ chuyển trạng thái của Service

1.3.3 Bộ nhận quảng bá (Broadcast receivers)

CÁC THÀNH PHẦN GIAO DIỆN ANDROID

Trong ứng dụng Android, giao diện người dùng được hình thành từ các đối tượng View và ViewGroup Có nhiều loại View và ViewGroup khác nhau, mỗi loại đều là một hậu duệ của lớp View, và tất cả các loại này được gọi chung là Widget.

Tất cả các Widget đều sở hữu những thuộc tính cơ bản giống nhau, bao gồm cách trình bày, vị trí, nền, kích thước và lề Những thuộc tính chung này được thể hiện đầy đủ trong đối tượng View.

In the Android platform, screens are organized in a hierarchical structure, consisting of a collection of layouts and widgets arranged in a specific order To display a screen, the setContentView(R.layout.main) method must be called within the onCreate function of each Activity, which loads the interface from the XML file and translates it into bytecode for processing.

Hình 1.8: Cấu trúc một giao diện ứng dụng Android

ViewGroup thực ra chính là View hay nói đúng hơn thì ViewGroup chính là các Widget Layout được dùng để bố trí các đối tượng khác trong một Screen

LinearLayout được dùng để bố trí các thành phần giao diện theo chiều ngang hoặc chiều dọc nhưng trên một dòng duy nhất mà không có xuống dòng

LinearLayout giúp các thành phần bên trong không bị ảnh hưởng bởi kích thước màn hình Các thành phần trong LinearLayout được sắp xếp theo tỷ lệ cân xứng dựa trên các ràng buộc giữa chúng.

Hình 1.9: Bố trí các Widget sử dụng LinearLayout

FrameLayout là một công cụ hữu ích trong việc bố trí các đối tượng giống như các lớp trong Photoshop, nơi các đối tượng ở lớp dưới sẽ bị che khuất bởi các đối tượng ở lớp trên Loại bố trí này thường được áp dụng khi cần tạo ra các đối tượng với khung hình bên ngoài, ví dụ như nút hình ảnh liên hệ.

Hình 1.10: Bố trí các Widget trong FrameLayout

Layout này cho phép bố trí các Widget ở vị trí tùy ý thông qua hai thuộc tính tọa độ x, y Tuy nhiên, kiểu layout này ít được sử dụng do tọa độ của các đối tượng cố định và không tự điều chỉnh khoảng cách giữa chúng Khi ứng dụng được chuyển sang màn hình có kích thước khác so với thiết kế ban đầu, vị trí của các đối tượng sẽ không còn chính xác.

Layout này cho phép bố trí các Widget theo trục đối xứng ngang hoặc dọc, với các Widget được xác định mối ràng buộc với nhau như trái, phải, trên, dưới hoặc với Layout Parent Nhờ vào các ràng buộc này, RelativeLayout không phụ thuộc vào kích thước màn hình thiết bị, giúp tiết kiệm tài nguyên khi tải và tăng tốc độ xử lý.

Hình 1.11: Bố trí widget trong RetaliveLayout

Layout này được áp dụng khi cần thiết kế bảng dữ liệu hoặc sắp xếp các Widget theo hàng và cột, như trong giao diện của một máy tính đơn giản hoặc danh sách dữ liệu.

Hình 1.12: Bố trí Widget trong TableLayout

Widget Button được giới thiệu đầu tiên trong số các Widget khác do đây là đối tượng được sử dụng phổ biến nhất trong hầu hết các ứng dụng Android Để thiết kế giao diện với Button, có hai cách thực hiện.

Thuộc tính android:onClick="touchMe" được sử dụng để xử lý sự kiện click trên button Khi người dùng nhấn vào button, phương thức "touchMe" được định nghĩa trong thuộc tính sẽ được gọi để thực hiện các hành động tương ứng.

Nếu phương thức "touchMe" chưa được khai báo trong file mã nguồn, một exception sẽ xảy ra Ngược lại, phương thức này sẽ nhận một tham số là đối tượng View, nơi sự kiện được phát sinh Đối tượng View này có thể được ép kiểu trực tiếp thành Button, vì thực chất nó là một Button.

VD: Trong file mã nguồn khai báo một hàm như sau: public void touchMe(View v){

Nếu không cần tùy chỉnh Widget, chúng ta không cần sử dụng mã code Tuy nhiên, trong một số trường hợp, việc tùy chỉnh Widget là cần thiết để phù hợp với ngữ cảnh, chẳng hạn như trong game, các menu hay nút điều khiển Để khai báo một Button trong mã code, chúng ta có thể thực hiện theo các bước cụ thể.

To create a custom widget in Android, you need to define a class that extends the desired widget class Within this class, you can override the draw method to render the widget, utilizing the canvas for drawing operations, such as using canvas.drawPicture(Picture.createFromStream( )) For example, you can create a button with the text "Touch Me!" and set an onClickListener to handle user interactions.

Cũng tương tự như Button, ImageButton chỉ có thêm một thuộc tính android:src

= “@drawable/icon” để thêm hình ảnh vào và không có thẻ text

Ngày đăng: 09/05/2022, 00:54

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w