Mục tiêu và nhiệm vụ nghiên cứu
a Mục tiêu nghiên cứu: xây dựng ứng dụng học tiếng anh trên hệ điều hành android b Nhiệm vụ
▪ Đọc tài liệu, nghiên cứu tìm hiểu cách lập trình trên hệ điều hành android
▪ Tìm hiểu cách sử dụng ngôn ngữ Java và các thư viện của android để lập trình ứng dụng
▪ Tìm hiểu các vấn đề liên quan đến việc làm thế nào để xây dụng được một ứng dụng học android
▪ Viết đề cương báo cáo và hoàn thành ứng dụng.
Kết quả đạt được
Xây dựng ứng dụng HocTiengAnh với các tính năng cơ bản như tra từ, từ vựng, học nghe, và học qua YouTube Ứng dụng còn cho phép người dùng đánh dấu và lưu lại các từ cần thiết, đồng thời quản trị dữ liệu một cách hiệu quả với các chức năng thêm, sửa và xóa.
Áp dụng vào thực tế
▪ Ứng dụng có thể cài đặt và chạy trên tất cả các thiết bị chạy hệ điều hành android.
Nội dung dự án
Chương 1 Cơ sở lý thuyết
▪ Giới thiệu tổng quan về đề tài và sự cần thiết của việc nghiên cứu đề tài này, đồng thời cũng nêu lên mục tiêu và hướng tiếp cận
Chương 2 Phân tích thiết kế hệ thống
Chương 3 Xây dựng chương trình và kết quả đạt được
Chương 4 Xây dựng các Module của chương trình-triển khai chạy thử trên máy ảo và máy thật
Chương 5 Kết luận và hướng phát triển
Sinh viên: Quách Văn Hà
CƠ SỞ LÝ THUYẾT
Lịch sử android
Android là hệ điều hành dành cho thiết bị di động như điện thoại và máy tính bảng, được phát triển bởi Google dựa trên nền tảng Linux phiên bản 2.6 Hệ điều hành này cung cấp các dịch vụ cốt lõi như bảo mật, quản lý bộ nhớ, quản lý tiến trình, ngăn xếp mạng và mô hình driver Với khoảng 200.000 ứng dụng hiện có và 100.000 ứng dụng đã được đệ trình, Android đã trở thành hệ điều hành di động có môi trường phát triển lớn thứ hai Các nhà phát triển ứng dụng cho Android chủ yếu sử dụng ngôn ngữ Java.
Google công bố hầu hết các mã nguồn của Android theo bản cấp phép Apache
Hệ điều hành Android bao gồm 12 triệu dòng mã; 3 triệu dòng XML, 2.8 triệu dòng mã C, 2.1 triệu dòng mã Java và 1.75 triệu dòng mã C++.
Lịch Sử Android
Initially, Android was a mobile operating system built on the Linux platform, developed by Android Inc., which included founders Andy Rubin, Rich Miner, Nick Sears, and Chris White.
At the end of 2007, the Open Handset Alliance was formed, comprising prominent members from the telecommunications and mobile device sectors, including Texas Instruments, Broadcom Corporation, Google, HTC, and Intel.
LG, Marvell Technology Group, Motorola…
Liên minh này hướng đến việc nhanh chóng đổi mới nhằm đáp ứng tốt hơn nhu cầu người tiêu dùng, với kết quả đầu tiên là nền tảng Android Android được thiết kế để phục vụ cho các nhà sản xuất, nhà khai thác và lập trình viên thiết bị cầm tay Đây là hệ thống nền tảng phần mềm dành cho điện thoại di động, bao gồm hệ điều hành, các phần tử giao tiếp trung gian (middleware) và các ứng dụng chính (key application).
Phiên bản SDK (Software Development Kit) lần đàu tiên phát hành vào tháng 11-
Vào năm 2007, T-Mobile đã giới thiệu chiếc điện thoại Android đầu tiên mang tên T-Mobile G1, đánh dấu sự ra mắt của smartphone đầu tiên dựa trên nền tảng Android Chỉ vài ngày sau, Google cũng công bố phiên bản Android SDK release Candidate.
Sinh viên: Quách Văn Hà
1.0 Trong tháng 10 năm 2008, Google được cấp giấy phép mã nguồn mở cho Android Platform
Khi Android ra mắt, một trong những mục tiêu chính của kiến trúc hệ điều hành này là cho phép các ứng dụng tương tác và tái sử dụng các thành phần từ ứng dụng khác, bao gồm cả dịch vụ, dữ liệu và giao diện người dùng Vào cuối năm 2008, Google phát hành Android Dev Phone 1, cho phép các nhà phát triển thử nghiệm ứng dụng Android mà không cần ràng buộc với nhà cung cấp mạng Cùng thời điểm, Google cũng phát hành phiên bản 1.1 của hệ điều hành Android Trong hai phiên bản 1.0 và 1.1, Android chưa hỗ trợ bàn phím ảo, yêu cầu sử dụng bàn phím vật lý Vấn đề này được khắc phục với việc phát hành SDK 1.5 vào tháng 4 năm 2009 Từ đó, Android đã trải qua nhiều phiên bản khác nhau, từ 1.0 đến 4.3, với các tính năng ngày càng phong phú và hoàn thiện hơn.
Kiến trúc của Android
Mô hình thể hiện tổng quan về các thành phần của hệ điều hành Android Mỗi một phần sẽ được đặc tả một cách chi tiết dưới đây
Sinh viên: Quách Văn Hà
Hình 1-1 Cấu trúc stack hệ thống android
Android tích hợp nhiều ứng dụng cơ bản như Danh bạ, trình duyệt, máy ảnh và điện thoại Tất cả các ứng dụng chạy trên hệ điều hành Android đều được phát triển bằng ngôn ngữ Java.
Android là một nền tảng phát triển mở, cho phép các nhà phát triển xây dựng ứng dụng đa dạng và sáng tạo Họ có thể tận dụng các thiết bị phần cứng, thông tin vị trí, dịch vụ nền và thiết lập hệ thống báo động để tối ưu hóa trải nghiệm người dùng.
Nhà phát triển có thể truy cập các API (Giao diện lập trình ứng dụng) cùng với khuôn khổ của các ứng dụng lõi, giúp đơn giản hóa việc sử dụng các thành phần Mỗi ứng dụng có thể xuất bản khả năng của mình, cho phép các ứng dụng khác sử dụng những khả năng đó, trong khi vẫn có thể áp dụng các hạn chế bảo mật do khuôn khổ thiết lập Cơ chế này cho phép người dùng thay thế các thành phần tương tự theo nhu cầu.
Sinh viên: Quách Văn Hà
Cơ bản tất cả các ứng dụng là một bộ các dịch vụ và các hệ thống, bao gồm:
• Một tập hợp các View có khả năng kế thùa lẫn nhau dụng để thiết kế phàn giao diện ứng dụng như: gridview, tableview, linearlayout…
Một "Content Provider" cho phép các ứng dụng truy xuất và chia sẻ dữ liệu từ các ứng dụng khác, như danh bạ (Contacts), giúp cải thiện khả năng tương tác và tích hợp giữa các ứng dụng.
• Một “Resource Manager” cung cấp truy xuất tới các tài nguyên không phải là mã nguồn, chẳng hạn như: localized strings, graphics, and layout files
• Một “Notifycation Manager” cho phép tất cả các ứng dụng hiển thị các custom alerts trong status bar
Activity manager được dụng để quản lý chu trình sống của ứng dụng và điều hướng các activity
Android là một hệ thống bao gồm nhiều thư viện C/C++ được sử dụng cho các thành phần khác nhau Điều này được thể hiện rõ ràng qua nền tảng ứng dụng Android.
Android sử dụng một tập hợp dữ liệu cơ bản cung cấp hầu hết các chức năng trong thư viện lõi của ngôn ngữ lập trình Java Mỗi ứng dụng Android chạy trong một tiến trình riêng biệt, nhờ vào máy ảo Dalvik được thiết kế để cho phép nhiều máy ảo hoạt động hiệu quả trên một thiết bị Các máy ảo Dalvik thực thi các tệp thực thi dalvik (dex) với định dạng tối ưu hóa cho bộ nhớ tối thiểu Máy ảo này dựa trên kiến trúc register-based và xử lý các lớp đã được biên dịch Java để chuyển đổi thành định dạng dex Ngoài ra, các máy ảo Dalvik còn phụ thuộc vào nhân Linux để thực hiện các chức năng cơ bản như quản lý luồng và bộ nhớ.
Android is built on the Linux kernel version 2.6, which supports essential core services such as security, memory management, process management, network stack, and driver mode The Linux kernel serves as an abstraction layer between the hardware and the rest of the software stack.
Sinh viên: Quách Văn Hà
ANDROID EMULATOR (giả lập chạy ANDROID)
Android SDK (Software Development Kit) và Plugin Eclipse được gọi là Android Developer Tool (ADT), là công cụ thiết yếu cho các lập trình viên Android Công cụ IDE (Integrated Development Environment) này hỗ trợ phát triển, gỡ lỗi và thử nghiệm ứng dụng Ngoài ra, lập trình viên cũng có thể sử dụng dòng lệnh để biên dịch mà không cần IDE, trong khi vẫn có thể sử dụng Emulator như bình thường.
Android Emulator sở hữu hầu hết các tính năng giống như một thiết bị thật, nhưng một số chức năng như kết nối USB, camera, video, nghe gọi, nguồn điện giả lập và Bluetooth bị hạn chế.
Android Emulator sử dụng một bộ xử lý mã nguồn mở để thực hiện các tác vụ, công nghệ này được biết đến với tên gọi QEMU, do Fabrice Bellard phát triển.
Các thành phần Android
In any Android project, the AndroidManifest.xml file is crucial as it defines the screens used, the permissions required, and the themes for the application Additionally, it contains information about the SDK version and specifies the initial activity that will run.
Sinh viên: Quách Văn Hà
File này được tự động sinh ra khi tạo một Android Project Trong file manifest bao giờ cũng có 3 thành phần chính đó là: application, permission và version
Ví dụ về một file AndroidManifest.xml
Sinh viên: Quách Văn Hà
Thẻ bên trong thể này chứa các thuộc tính được định nghĩa cho ứng dụng Android như:
• Android icon=” drawable resource”: ở đây đường dẫn đến file icon của ứng dụng khi cài đặt VD: android:icon=”@drawable/icon”
• Android:name=”string”: thuộc tính này dùng để đặt tên cho ứng dụng Android Tên này sẽ được hiển thị lên màn hình sau khi cài đặt ứng dụng
• Android:theme=”drawable them”: thuộc tính này dùng để đặt them cho ứng dụng Các theme là cách để hiển thị giao diện ứng dụng
Ngoài ra còn nhiều thuộc tính khác
Trong file manifest của ứng dụng, cần khai báo các thuộc tính chỉ định quyền truy xuất và sử dụng tài nguyên Điều này là cần thiết khi ứng dụng muốn sử dụng một nguồn tài nguyên cụ thể.
Sinh viên: Quách Văn Hà
Quyền quản lý tài khoản:
+ quyền cho phép thực hiện cuộc gọi:
Thẻ xác định phiên bản SDK được khai báo như sau
File R.java được tự động tạo ra khi ứng dụng được khởi tạo, đóng vai trò quan trọng trong việc quản lý các thuộc tính được khai báo trong file XML và tài nguyên hình ảnh của ứng dụng.
File R.java được tự động tạo ra khi có sự kiện thay đổi thuộc tính trong ứng dụng, như việc kéo thả một file hình ảnh vào Project Khi đó, đường dẫn đến file hình ảnh sẽ được thêm vào R.java Ngược lại, nếu xóa file hình ảnh, đường dẫn tương ứng cũng sẽ tự động bị xóa khỏi R.java.
Có thể nói file R.java hoàn toàn không phải đụng chạm gì đến trong quá trình xây dựng ứng dụng
Ví dụ một file R.java
/* 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
Sinh viên: Quách Văn Hà public final class R { public static final class array { public static final int teo=0x7f060000;
} public static final class attr {
} public static final class dimen {
/** Default screen margins, per the Android Design guidelines
Customize dimensions originally defined in res/values/dimens.xml (such as screen margins) for sw720dp devices (e.g 10" tablets) in landscape here
In Android development, specific dimensions are defined using constants for layout margins and padding The constants include `activity_horizontal_margin` and `activity_vertical_margin`, both set to zero, alongside various padding sizes such as `padding_large`, `padding_medium`, and `padding_small`, which are represented by unique resource IDs These constants facilitate consistent spacing in user interface design.
The drawable class contains several static final integer resources that represent various graphical elements in an application These include identifiers for background menus such as `backgroupmenu` and `backmenu`, as well as specific images like `bgchao`, `eight8`, `five5`, and `four4`, each associated with unique hexadecimal values.
Quách Văn Hà has defined several static final integer constants for resource identifiers, including icons for help, student, search action, and application launcher These identifiers range from giupdo (help) at 0x7f020006 to two2 at 0x7f020013, facilitating the organization and retrieval of various resources within the application.
The provided code snippet defines a public static final class named 'id', which contains a series of integer constants representing unique identifiers for various UI components in an Android application These identifiers include action settings, buttons for different functionalities, and editable text fields, such as 'action_settings', 'button1', 'editText1', and 'formtracuu' Each constant is associated with a hexadecimal value, which is crucial for referencing these elements within the app's layout and functionality.
The article lists various public static final integer identifiers used in a programming context, specifically within a user interface layout These identifiers include 'gioitu' for gender, 'hienketqua' for displaying results, and 'hinhbackmenu' for the background image of the menu Other identifiers represent UI components such as 'imageView1', 'label', and 'listView1', which are essential for structuring the layout Additionally, there are identifiers for navigation and content elements, including 'menugroup', 'noidunginfo', and 'scrollView1', which enhance user interaction and information presentation Overall, these integer constants play a crucial role in defining the visual elements and functionality of the application interface.
The article lists various public static final integer constants used in programming, specifically for UI components in an application Key identifiers include textView3, textView4, textView5, and textView6, each associated with unique hexadecimal values Additional constants such as thantu, tinhtu, tukhoa, and videoView1 are also defined, indicating their roles in the user interface Other identifiers like view1 through view9 and webView1 further illustrate the range of components utilized in the application’s layout.
The layout class defines several static final integer constants representing different layout resources in an Android application Key resources include activity_main, elearning, ghichep, gioithieu, hocnghephatam, and infotracuu, each associated with unique hexadecimal identifiers These constants facilitate the organization and referencing of UI components throughout the application.
The article presents a series of constant integer values used in a programming context, specifically in Android development These constants represent various layout resources, such as `infovanpham`, `list_item`, `manghinhchao`, and others, each associated with unique hexadecimal identifiers The constants include layouts for inputting and editing tasks, displaying authors, and managing video playback This structured approach aids developers in efficiently referencing UI components within their applications.
} public static final class menu { public static final int activity_main=0x7f090000;
} public static final class raw { public static final int camonthoat=0x7f040000; public static final int chaomungok=0x7f040001; public static final int moichonok=0x7f040002; public static final int video4=0x7f040003;
The article presents a public static final class named "string," which includes various integer constants representing different string resources for an application Notable entries include "E_Learning" with a value of 0x7f070005, "action_settings" at 0x7f070001, and "app_name" designated as 0x7f070000 Additional constants include "capnhat_trove" (0x7f07001b), "cham" (0x7f07002d), "chon_video" (0x7f07002e), and "chonbaihoc" (0x7f070025), which are likely used for various functionalities within the app.
The article lists various constants used in an application, including identifiers for tasks such as document reading, email management, and app introduction Key constants include danhsachcongviec for the task list, docvanban for document reading, and email for email functionalities Other notable identifiers are gioithieu_app for app introduction, lamtracnghiem for quiz activities, and ketqua for results The constants also cover user interactions like saving (luu_trove), returning (quaylai), and input fields for user data such as phone number (sodt) and document input (nhapvanban) Each constant is represented by a unique hexadecimal value, indicating its role within the app's functionality.
The article lists various public static final integer constants used in programming, specifically in an Android application context These constants include identifiers for different elements such as "sosanh," "ten," "thantu," and "them," which correspond to specific features or functionalities within the app Other constants like "thoigianthuchien," "thongtin_doan," and "tinhtu" are also defined, indicating their roles in managing time, group information, and emotional states, respectively Additionally, the constants "title_activity_main," "tracuu," "tudongdoccau," "ungdung_hocngoaingu," "video_internet," and "yesterday" suggest various components of the user interface and application capabilities related to language learning and content retrieval.
} public static final class style {
Base application theme, dependent on API level This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devices
Theme customizations available in newer API levels can go in res/values-vXX/styles.xml, while customizations related to backward-compatibility can go here
Base application theme for API 11+ This theme completely replaces AppBaseTheme from res/values/styles.xml on API 11+ devices
Sinh viên: Quách Văn Hà
API 11 theme customizations can go here
Base application theme for API 14+ This theme completely replaces AppBaseTheme from BOTH res/values/styles.xml and res/values-v11/styles.xml on API 14+ devices
API 14 theme customizations can go here
*/ public static final int AppBaseTheme=0x7f080000;
All customizations that are NOT specific to a particular API-level can go here */ public static final int AppTheme=0x7f080001;
CHU KÌ ỨNG DỤNG ANDROID
Một tiến trình Linux gói gọn trong một ứng dụng Android đã được tạo ra ứng dụng khi code cần đượng Run và sẽ còn chạy cho đến khi:
• Những phần của ứng dụng mà hệ thống biết đang chạy
• Những phần quan trọng như thế nào đối với người dùng
1.6.1 Chu kì sống của một ứng dụng
Các thành phần ứng dụng trải qua một chu kỳ sống, bắt đầu từ khi được khởi tạo cho đến khi kết thúc Trong quá trình này, các thành phần có thể ở trạng thái Active hoặc Inactive Nếu ở trạng thái Active, chúng có thể hiển thị (Visible) hoặc không hiển thị (Invisible).
Sinh viên: Quách Văn Hà
Hình 1.3 Chu kỳ sống của thành phần ứng dụng
Trong các hệ thống quản lý activity, các activity được tổ chức như một ngăn xếp (stack) Khi một activity mới được khởi chạy, nó sẽ được đặt ở đỉnh của ngăn xếp và trở thành activity đang hoạt động, trong khi activity trước đó sẽ nằm dưới activity mới và không thể nhìn thấy cho đến khi activity mới kết thúc.
Nếu người dùng nhấn nút Back thì activity kế tiếp của Stack sẽ di chuyển lên và trở thành Active
Sinh viên: Quách Văn Hà 20 Lớp: 510CNT
1.6.3 Các trạng thái của chu kì sống
Hình 1.5 Chu kỳ sống của Activity
Một Activity chủ yếu có 3 Chu kỳ sau:
• Activity Running: khi Activity được chạy trên màn hình Activity này tập trung vào những thao tác của người dùng trên ứng dụng
Một Activity sẽ được tạm dừng khi không có người dùng tương tác, nhưng vẫn hiển thị trên màn hình Điều này có nghĩa là một Activity mới có thể xuất hiện, nhưng không chiếm toàn bộ màn hình Mặc dù Activity tạm dừng vẫn còn hoạt động, nó có thể bị hệ thống kết thúc nếu thiếu bộ nhớ.
Sinh viên: Quách Văn Hà
Khi một hoạt động khác hoàn toàn chiếm lĩnh, trạng thái và thông tin thành viên của nó vẫn được giữ nguyên, nhưng người dùng không thể nhìn thấy Trong trường hợp hệ thống cần bộ nhớ cho các tác vụ khác, nó thường bị loại bỏ.
1.6.4 Chu kỳ sống của ứng dụng
Trong một ứng dụng Android, mỗi thành phần đều có chu trình sống riêng, và ứng dụng chỉ kết thúc khi tất cả các thành phần đều ngừng hoạt động Activity là một thành phần quan trọng cho phép người dùng tương tác với ứng dụng Tuy nhiên, khi tất cả các Activity kết thúc và người dùng không còn tương tác, điều đó không có nghĩa là ứng dụng đã hoàn toàn kết thúc.
Trong hệ thống Android, Activity là thành phần chính cho phép người dùng tương tác, trong khi các thành phần khác như Service và Broadcast Receiver không có khả năng tương tác trực tiếp với người dùng Những thành phần này có thể hoạt động ngầm trong nền dưới sự giám sát của hệ điều hành và chỉ dừng lại khi người dùng quyết định tắt chúng.
1.6.5 Các sự kiện trong Chu kỳ sống của ứng dụng
Khi một Activity tạm dừng hoặc dừng hẳn, hệ thống có thể xóa thông tin của nó từ bộ nhớ bằng cách gọi hàm finish() hoặc kết thúc tiến trình Khi Activity được hiển thị lại cho người dùng, nó cần phải khởi động lại hoàn toàn và phục hồi trạng thái trước đó Để thông báo việc chuyển đổi giữa các trạng thái, Activity phải gọi hàm transition.
Sinh viên: Quách Văn Hà
Tất cả các phương thức mà bạn có thể ghi đè để thực hiện công việc tương thích trong ứng dụng khi thay đổi trạng thái đều rất quan trọng Mỗi Activity cần có phương thức onCreate() để khởi tạo ứng dụng, trong khi nhiều Activity cũng sử dụng onPause() để xử lý việc thay đổi dữ liệu và chuẩn bị dừng hoạt động với người dùng.
1.6.6 Thời gian sống của ứng dụng
Trong chu kỳ sống của một Activity, có bảy phương thức chuyển tiếp định nghĩa Thời gian sống của Activity bắt đầu từ lần đầu tiên gọi onCreate() cho đến khi gọi onDestroy() để kết thúc Trong phương thức onCreate(), Activity khởi tạo toàn bộ trạng thái toàn cục, trong khi onDestroy() đảm bảo giải phóng các tài nguyên đang tồn tại.
1.6.7 Thời gian hiển thị của Activity
Thời gian hiển thị của một Activity diễn ra từ khi gọi onStack() cho đến khi gọi onStop() Trong khoảng thời gian này, người dùng có thể nhìn thấy activity trên màn hình, tức là nó đang ở chế độ foreground và tương tác với người dùng Giữa hai phương thức này, người dùng có thể duy trì tài nguyên để tiếp tục hiển thị activity.
1.6.8 Các phương thức của chu kỳ sống
Sinh viên: Quách Văn Hà
• Được gọi khi Activity lần đầu tiên được tạo
• Ở đây bạn là tất cả các cài đặt tĩnh—tạo các View, kết nối dữ liệu…
• Phương thức này gửi qua một đối tượng gọi là Bundle chứa đựng trạng thái trước của Activity
• Luôn theo sau bởi onStart()
• Được gọi sau khi Activity đã được dừng, chỉ một khoảng đang khởi động lần nữa(stared again)
• Luôn theo sau bởi onStart()
• Được gọi sau khi Activity Visible với người dùng
• Theo sau bởi onResume() nếu Activity đến trạng thái foreground hoặc onStop() nếu nó trở nên ẩn
• Được gọi trước khi Activity tương tác với người dùng
• Tại thời điểm này activity ở trên đỉnh của stack activity
• Luôn theo sau bởi onPause()
• Được gọi khi hệ thống đang resuming activity khác
• Phương thức này là điển hình việc giữ lại không đổi dữ liệu
• Nó nên được diễn ra nhanh chóng bởi vì activity kế tiếp không được resumed ngay khi nó trở lại
• Theo sau bởi onResume nếu activity trở về từ trước, hoặc bởi onStop() nếu nó ở trên visible với người dùng
• Trạng thái của activity có thể bị giết bởi hệ thống
• Được gọi khi activity không thuộc tầm nhìn của người dùng
Sinh viên: Quách Văn Hà
• Nó có thể diễn ra bởi vì nó đang bị hủy, hoặc bởi vì activity khác đang được resumed và bao phủ nó
• Được theo sau bởi onRestart() nếu activity đang đỡ lại để tương tác với người dùng, hoặc onDestroy() nếu activity đó đang bỏ
• Trạng thái của activity có thể bị giết bởi hệ thống
• Được gọi trước khi activity bị hủy
• Đó là lần gọi cuối cùng mà activity được nhận
• Nó được gọi khác bởi vì activity đang hoàn thành, hoặc bởi vì hệ thống tạm thời đang bị hủy diệt đêt tiết kiệm vùng nhớ
• Bạn có thể 2 kịch bản với vói phương thúc isFinishing()
Trạng thái của activity có thể được đặt bởi hệ thống.
Các thành phần giao diện Android
Trong ứng dụng Android, giao diện người dùng được cấu thành từ các đối tượng View và ViewGroup, với nhiều loại khác nhau Mỗi loại đều kế thừa từ lớp View và tất cả đều được gọi chung là Widget.
Tất cả các Widget đều chia sẻ những thuộc tính cơ bản như vị trí, nền, kích thước và lề, và những thuộc tính này được thể hiện trong một đối tượng View.
Trên nền tảng Android, các màn hình được tổ chức theo cấu trúc phân cấp Mỗi màn hình bao gồm các bố cục và widget được sắp xếp theo thứ tự Để hiển thị một màn hình, trong hàm onCreate của mỗi Activity, cần gọi hàm setContentView(R.layout.main); hàm này sẽ tải giao diện từ file XML và chuyển đổi thành mã bytecode.
Sinh viên: Quách Văn Hà
Hình 1.7 cấu trúc một giao diện ứng dụng android
ViewGroup là một loại View, cụ thể hơn, nó là các Widget layout được sử dụng để sắp xếp các đối tượng khác trên một màn hình.
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 line 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.8 bố trí các widget trong một LinearLayout
Sinh viên: Quách Văn Hà
FrameLayout được bố trí các đối tượng theo kiểu giống như một Layer trong
Trong Photoshop, các đối tượng trong Layer dưới sẽ bị che khuất bởi các đối tượng trong Layer trên FrameLayer thường được sử dụng để tạo ra các đối tượng trong khung hình bên ngoài, ví dụ như nút hình ảnh liên hệ.
Hình 1.9 Bố trí cá widget sử dụng FrameLayout
Layout này được sử dụng để bố trí các Widget vào một vị trí bất khì trong
Layout dựa vào tọa độ x, y thường ít được sử dụng do vị trí của các đối tượng luôn cố định, không thể điều chỉnh tỷ lệ khoảng cách giữa chúng Khi chuyển ứng dụng sang màn hình có kích thước khác 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.
Bố trí này cho phép sắp xếp các Widget theo trục đối xứng, có thể là ngang hoặc dọc Để đảm bảo vị trí chính xác, các Widget cần được xác định với một mố ràng buộc cụ thể.
Widget khác Các ràng buộc này là các ràng buộc trái, phải, trên dưới so với Widget
RelativeLayout giúp xác định vị trí của các thành phần giao diện dựa trên mối quan hệ với các thành phần khác hoặc với Layout cha Điều này cho phép RelativeLayout linh hoạt hơn với kích thước màn hình của thiết bị Ngoài ra, việc sử dụng RelativeLayout còn giúp tiết kiệm tài nguyên và tăng tốc độ xử lý khi tải giao diện.
Hình 1.10 bố trí các Widget sử dụng RelativeLayout
Layout này được áp dụng để thiết kế bảng dữ liệu, giúp bố trí các dữ liệu theo hàng và cột Ví dụ như giao diện của một máy tính đơn giản hoặc danh sách dữ liệu.
Sinh viên: Quách Văn Hà
Hình 1.11 bố trí các Widget sử dụng TableLayout
Là đối tượng được sử dụng nhiều nhất trong hầu hết các ứng dụng Android Để thiết kế môt giao diện Button ta có 2 cách sau
Thuộc tính android:onClick="clickHere" được sử dụng để xử lý sự kiện khi người dùng nhấn vào nút Khi nút được nhấn, phương thức "touchMe" được khai báo trong thuộc tính sẽ được gọi Nếu phương thức "touchMe" chưa được định nghĩa trong file mã nguồn, sẽ xảy ra một ngoại lệ.
Sinh viên: Quách Văn Hà
“clickHere” sẽ nhận một tham biến là đối tượng View nơi xảy ra sự kiện, và đối tượng View này có thể được ép kiểu trực tiếp sang kiểu Button vì thực chất nó là một button.
Ví dụ trong file mã nguồn khai báo như sau
Khi không cần tùy chỉnh một widget, chúng ta có thể tránh việc sử dụng mã code Tuy nhiên, trong một số tình huống nhất định, như trong game, việc tùy chỉnh các widget như nút menu và nút điều khiển là cần thiết để phù hợp với bối cảnh sử dụng.
Ví dụ để khai báo một button trong code ta làm như sau
To create a custom widget in Android, you need to define a new class that extends the desired widget class Within this class, you can override the draw method to render the widget as a canvas For example, you can create a button using the code `Button cmdButton = new Button(this); cmdButton.setText("ClickHere"); cmdButton.setOnClickListener( );`.
Ví du canvas.drawPicture(Picture.createFormStream(…));
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à không có thuộc tính Text
Sinh viên: Quách Văn Hà
ImageView được dùng để thể hiện một hình ảnh Nó cũng giống như ImageButton, chỉ khác là k có hình dáng của Button
Ví dụ: ImageView iv = new ImageView(this); iv.setImageResource(R.drawable.icon);