Bước 2: Cài đặt ADT - Mở Help -> Install new software ->Add - Ở mục Name: ADT plugin hoặc bạn có thể nhập tên khác cũng được - Location: Nhập vào link: http://dl-ssl.google.com/android/e
Trang 1Thái nguyên, ngày tháng 06 năm 2012 Sinh viên
Hoàng Thị Thu Hương
Trang 3LỜI CAM ĐOAN
Em xin cam đoan toàn bộ đồ án: “Xây dựng ứng dụng máy tính khoa học
cho điện thoại thông minh hệ điều hành Android” là do bản thân tìm hiểu,
tham khảo, nghiên cứu Không có sự sao chép nội dung từ các đồ án khác Tất cảnội dung hoặc hình ảnh minh họa đều có nguồn gốc xuất xứ rõ ràng từ các tài liệu tham khảo ở nhiều nguồn khác nhau mà xây dựng nên Em xin cam đoan những lời trên là đúng, mọi thông tin sai lệch em xin hoàn toàn chịu trách nhiệm trước Hội đồng
Thái Nguyên, tháng 6 năm 2012.
Sinh viên Hoàng thị thu Hương
Trang 4MỤC LỤC
Trang 5LỜI NÓI ĐẦU
Trong thời điểm hiện nay, trên thế giới cũng như tại Việt Nam thị trườngdành cho điện thoại di động đang trở nên sôi động hơn bao giờ hết Do thu nhậpcủa người dân càng ngày càng được cải thiện cũng như cầu trao đổi thông tincàng ngày càng ra tăng Và theo điều tra của các nhà nghiên cứu thì chiếc điệnthoại gần như là một vật dụng không thể thiếu và là vật dụng được sử dụng nhiềunhất đối với mỗi người sở hữu nó Cùng với sự phát triển đó thì các ứng dụngtrên điện thoại ngày càng phát triển mạnh mẽ do đó xu hướng phát triển việc lậptrình trên điện thoại di động là điều tất yếu Với những tính năng đặc biệt và tiệndụng thì hiện giờ Android đang trở thành một hệ điều hành được rất nhiều người
ưa chuộng Và theo dự đoán của các nhà Nghiên cứu thì năm 2012 hệ điều hànhAndroid thực sự trở thành vua trong hệ điều hành của thế giới di động Nắm bắtđược xu thế phát triển của lập trình ứng dụng trên điện thoại cho nên trong thời
gian làm đồ án tốt nghiệp lần này em quyết định chọn đề tài: “Xây dựng máy tính khoa học cho điện thoại thông minh hệ điều hành Android”
Nội dung của bài báo cáo tốt nghiệp gồm có 3 phần:
Chương 1: Hệ điều hành Android
Chương 2: Phân tích chương trình máy tính số học
Chương 3:Thiết kế và xây dựng ứng dụng
Trang 6Hình 1-1 Lịch sử AndroidCuối năm 2007, thuộc về OHA( Open Handset Alliance) Liên minhtheieets bị cầm tay mã nguồn mở gồm các thành viên nổi bật trong ngành viễnthôgn và thiết bị cầm tay như: Texas Instruments, Broadcom Corporation,Google, HTC, Intel, LG, Marvell Technology Group, Motorola, Nvidia,Qualcomm, Samsung Electronics, Sprint Nextel, T-Mobile, ARM Holdings,Atheros Communications, Asustek Computer Inc, Garmin Ltd, Softbank, SonyEricsson, Toshiba Corp, and Vodafone Group,…
Mục tiêu của liên minh này là tạo ra một sản phẩm điện thoại tốt hơn và
do đó Android ra đời Thiết bị cầm tay có khả năng Android đầu tiên trên thị
Trang 7trường là thiết bị G1 do HTC sản xuất và được bán trên T-Mobile Một vài ngàysau đó Google công bố sự ra mắt của phiên bản Android SDK release Candidate1.0.
1.2 Kiến trúc của Android
1.2.3 Library:
Android bao gồm một tập hợp các thư viện C/C++ được sử dụng bởinhiều thành phần khác nhau trong hệ thống Android Một số thư viện cơ bản:
Trang 8• Hệ thống thư viện C : triển khai BSD-derived có nguồn gốc từ các hệ
thống thư viện chuẩn C (libc), chỉnh để nhúng vào các thiết bị dựa trênLinux
• Media Libraries – Dựa trên gói Video OpenCORE; các thư viện hỗ trợ
phát và ghi âm của các định dạng âm thanh và video phổ biến, cũng nhưcác file hình ảnh tĩnh, bao gồm MPEG4, H.264, MP3, AAC, AMR, JPG,and PNG
• Surface Manager – Quản lý việc truy xuất vào hệ thống hiển thị
• LibWebCore - một trình duyệt web hiện đại có quyền hạn trong cả trình
duyệt Android và hiển thị nhúng web
• SGL – Các cơ sở công cụ đồ họa 2D.
• 3D libraries - Thực hiện dựa trên OpenGL ES 1.0 APIs; Thư viện sử dụng
hoặc là tăng tốc phần cứng 3D (nếu có) hoặc bao gồm tối ưu hóa phầnmềm 3D
• FreeType - bitmap and vector font rendering.
• SQLite - a powerful and lightweight relational database engine available
to all applications
1.2.4 Android Runtime
Tại cùng một tầng như các thư viện, android runtime cung cấp một bộ lõithư viện cho phép các nhà phát triển viết các ứng dụng android bằng cách sửdụng ngôn ngữ lập trình java Android runtime cũng bao gồm các máy ảo Dalvik,cho phép mọi ứng dụng android chạy trong tiến trình riêng của mình Dalvik làmột máy ảo chuyên dụng được thiết kế đặc biệt cho android và tối ưu hóa chocác thiết bị điện thoại di động với giới hạn bộ nhớ và CPU
1.2.5 Linux Kernel:
Android dựa trên Linux phiên bản 2.6 cho hệ thống dịch vụ cốt lõi nhưsecurity, memory management, process management, network stack, and drivermodel Kernel Linux hoạt động như một lớp trừu tượng hóa giữa phần cứng vàphần còn lại của phần mềm stack
Trang 91.2 Công cụ và cài đặt:
Bước 1: Download và giải nén Eclipse Galileo tại :
http://www.eclipse.org/downloads/ Chúng ta nên sử dụng Eclipse gói Galileo đểlát nữa đỡ phải cầu hình lại Eclipse
Bước 2: Cài đặt ADT
- Mở Help -> Install new software ->Add
- Ở mục Name: ADT plugin hoặc bạn có thể nhập tên khác cũng được
- Location: Nhập vào link: http://dl-ssl.google.com/android/eclipse/
- OK-> Next cho đến khi cài đặt hoàn thành
Bước 3: Cài đặt Android SDK
- Tải Android SDK tại http://developer.android.com/sdk/index.html và giải
nén
- Mở Eclipse -> Window -> Preferences -> Android -> trong mục SDK location chọn Browse > đưa đường dẫn đến thư mục SDK vừa giải nén-
> bấm Apply-> Install
Bước 4: Tạo một máy điện thoại ảo (AVD)
- Vào Window-> Android SDK and AVD manager -> Virtual
devices-> New
- Điền vào các mục Name, Target: chọn API level cho phù hợp ứng dụng bạn chọn, SDcard chọn Size dùng, nếu không thì để trống cũng được.
Trang 101.4 Cấu trúc một Project Android:
Hình 1-3: Cấu trúc 1 project Android
1.4.1 AndroidManifest.xml:
Mỗi một project Android khi được tạo ra thì đều tạo ra một fileAndroidManifest.xml , file này được dùng để định nghĩa các screen sử dụng, cácpermission cũng như các theme cho ứng dụng Đồng thời nó cũng chứa thông tin
về phiên bản SDK cũng như main activity sẽ chạy đầu tiên
File này được tự động sinh ra khi tạo một Android project Trong file manifestbao giờ cũng có 3 thành phần chính đó là: application, permission và version
1.4.2 Thư mục src
Chứa source code ứng dụng Gồm các package và các class
Trang 111.4.3 Thư mục ges
Chứa các file tự động phát sinh( Thường gặp nhất là file R.class )
File R.java là một file tự động sinh ra ngay khi tạo ứng dụng, file nàyđược sử dụng để quản lý các thuộc tính được khai báo trong file XML của ứngdụng và các tài nguyên hình ảnh
Mã nguồn của file R.java được tự động sinh khi có bất kì một sự kiện nàoxảy xa làm thay đổi các thuộc tính trong ứng dụng Chẳng hạn như, bạn kéo vàthả một file hình ảnh từ bên ngoài vào project thì ngay lập tức thuộc tính đườngdẫn đến file đó cũng sẽ được hình thành trong file R.java hoặc xoá một file hìnhảnh thì đường dẫn tương ứng đến hình ảnh đó cũng tự động bị xoá
Là file mà ta hoàn toàn không cần phải đụng chạm gì đến trong cả quátrình xây dựng ứng dụng
1.4.4 Thưc mục res :
Chứa file main.xml và các hình ảnh có liên quan để thiết kế giao diện chomàn hình
1.5 Những khái niệm cơ bản trong Lập trình Android:
Một ứng dụng Android bao gồm 4 thành phần chính Active, Inactive,Visitable, Invisible
1.5.1 Activity:
Là một trong bốn thành phần chính của một ứng dụng Android, đượcdùng để hiển thị màn hình
Trang 12Lifecycle của Activity:
Hình 1-4 Vòng đời của activityMột ứng dụng có thể gồm chỉ một activity hay nhiều activity Thôngthường, một trong số các activity được đánh dấu như là activity đầu tiên phảiđược trình diễn tới người dùng khi ứng dụng được khởi động Chuyển từ mộtactivity sang activity khác được hoàn thành bằng cách cho activity hiện thời khởiđộng activity kế tiếp
Class cơ sở Activity định nghĩa một loạt các sự kiện mà điều chỉnh vòngđời của một hoạt động Class Activity định nghĩa các sự kiện:
dụng
Trang 13 onPause(): Được gọi để dừng các hoạt động hiện tại và nối lại các hoạt
động trước đó
tay hoặc bằng hệ thống để bảo tồn bộ nhớ
một lần nữa
1.5.2.Service:
Một service không có giao diện trực quan, nó chạy trên nền trong mộtkhoảng thời gian không xác định Ví dụ một service có thể chơi nhạc nền, hay nónạp dữ liệu trên mạng hay tính toán cái gì đó và cung cấp kết quả cho activitycần đến nó Mỗi service mở rộng từ lớp cơ sở Service
Một ví dụ cổ điển là media player chơi các bài hát từ một danh sách Ứngdụng player có thể có một hay hai activity cho phép người dùng chọn bài hát vàbắt đầu chơi Tuy nhiên, music playback không tự nó được xử lý bởi một activitybởi vì người dùng sẽ mong muốn chơi tiếp nhạc khi họ rời khỏi player và làm cái
gì đó khác Để tiếp tục chơi nhạc, media player activity có thể khởi động mộtservice chạy trên nền Hệ thống sẽ giữ cho music playback service chạy thậm chíkhi activity khởi động nó rời khỏi màn hình
Trong khi kết nối, bạn có thể giao tiếp với dịch vụ thông qua giao diện màservice đó trưng ra Ví dụ như trong music service, giao diện này có thể cho phépngười dùng pause, stop và restart lại playback
Giống như các activity và các thành phần khác khác, service chạy trongthread chính của tiến trình ứng dụng Vì thế chúng không thể chặn những thànhphần khác hay giao diện người dùng, chúng thường tạo ra các thread khác chocác nhiệm vụ hao tốn thời gian
Trang 14Hình 1-5 Chu trình sống service
1.5.3 Broadcast Receive:
Một Broadcast Rreceiver là một thành phần không làm gì ngoài việc nhận
và đáp lại các thông báo broadcast Nhiều broadcast khởi đầu trong mã hệ thống
-ví dụ như thông báo múi giờ thay đổi, pin yếu, ảnh đã được chụp, hay ngườidùng đã thay đổi ngôn ngữ … Các ứng dụng có thể tạo ra các broadcast, chẳnghạn để ứng dụng khác biết được một số dữ liệu đã được tải về thiết bị và sẵn sàngcho việc sử dụng chúng
Một ứng dụng có thể có một số Broadcast Receiver để đáp lại bất cứthông báo nào mà nó cho là quan trọng Tất cả các receiver mở rộng từ lớp cơ sởBroadcastReceiver
Broadcast Receiver không hiển thị một giao diện người dùng Tuy nhiênchúng có thể bắt đầu một activity để đáp lại thông tin mà chúng nhận, hay chúng
có thể sử dụng NotificationManager để cảnh báo người dùng Notifications cóthể lấy sự chú ý của người dùng bằng nhiều cách, lóe sáng đèn sau, rung, tạo ra
âm thah, vân vân Chúng thường lấy một biểu tượng bền vững trong thanh trạngthái, cái mà người dùng có thể mở để lấy thông điệp
Trang 151.5.4.Content provider:
Một content provider tạo ra một tập cụ thể các dữ liệu của ứng dụng khảdụng cho các ứng dụng khác Dữ liệu có thể được lưu trữ trong hệ thống file,trong một cơ sở dữ liệu SQLite, hay trong một cách khác nào đó Contentprovider mở rộng lớp cơ sở ContentProvider để cài đặt một tập các chuẩn cácphương thức cho phép các ứng dụng khác đạt được và lưu trữ dữ liệu của kiểu
mà nó điều khiển Tuy nhiên, các ứng dụng không gọi trực tiếp các phương thứcnày, chúng sử dụng một đối tượng ContentResolver và gọi các phương thức của
nó Một ContentResolver có thể nói chuyện với bất cứ content provider nào,chúng cộng tác với provider để quản lý giao tiếp liên tiến trình
1.5.5.Manifest File:
Trước khi Android có thể khởi động một thành phần ứng dụng, nó phảibiết rằng thành phần đó tồn tại Vì vậy, ứng dụng khai báo những thành phần củamình trong một manifest file được gắn vào Android package, file apk này cũnggiữ chứa mã của ứng dụng và các tài nguyên
Manifest file là một file XML có cấu trúc và thường được đặt tên làAndroidManifest.xml cho mọi ứng dụng Nó thực hiện một số bổ sung để khaibáo các thành phần của ứng dụng, như là nêu tên các thư viện ứng dụng cần đến,
và xác định các quyền hạn của ứng dụng muốn được cấp
Ví dụ như nó khai báo các Activity trong chương trình của chúng ta, khikhởi động chương trình thì Activity nào sẽ được thực hiện đầu tiên, các quyềntruy cập Internet, SDCard, hay các vấn đề về gửi nhận tin nhắn, cuộc gọi
1.5.6 Giao diện người dùng trong Android:
Trong một ứng dụng Android, giao diện người dùng được xây dựng bằngcách sử dụng View và ViewGroup đối tượng Có nhiều loại quan điểm và cácnhóm view, mỗi một trong số đó là hậu duệ của lớp View View objects là cácđơn vị cơ bản của biểu hiện giao diện người dùng trên nền tảng Android Cácclass xem như là cơ sở phục vụ cho class con được gọi là "widget", trong đócung cấp đầy đủ các đối tượng thực hiện giao diện, giống như các lĩnh vực vănbản và nút Class ViewGroup phục vụ như là cơ sở cho lớp con được gọi là "
Trang 16layouts", cung cấp các loại khác nhau của kiến trúc bố trí, như linear, tabular vàrelative
-Một View object là một cấu trúc dữ liệu có đặc tính lưu trữ các thông số
bố trí và nội dung cho một khu vực cụ thể hình chữ nhật của màn hình
-Một View object xử lý đo lường riêng của mình, bố trí, bản vẽ thay đổitập trung,, di chuyển, và phím/tương tác cử chỉ cho khu vực hình chữ nhật củamàn hình
Là một object trong giao diện người dùng, view cũng là một điểm tươngtác cho người sử dụng và nhận các sự kiện tương tác
a View
Tất cả mọi widget đều có chung các thuộc tính cơ bản như là cách trình bày vịtrí, background, kích thước, lề,… Tất cả những thuộc tính chung này được thểhiện hết ở trong đối tượng View
Trong Android Platform, các screen luôn được bố trí theo một kiểu cấu trúc phâncấp như hình dưới Một screen là một tập hợp các Layout và các widget được bốtrí có thứ tự Để thể hiện một screen thì trong hàm onCreate của mỗi Activity cầnphải được gọi một hàm là setContentView(R.layout.main); hàm này sẽ load giaodiện từ file XML lên để phân tích thành mã bytecode
Hình 1-6 Cấu trúc một giao diện ứng dụng Android
Trang 18Hình 1-8 Bố trí các widget trong FrameLayout
• AbsoluteLayout
Layout này được sử dụng để bố trí các widget vào một vị trí bất kì trong layoutdựa vào 2 thuộc tính toạ độ x, y Tuy nhiên, kiểu layout này rất ít khi được dùngbởi vì toạ độ của các đối tượng luôn cố định và sẽ không tự điều chỉnh được tỷ lệkhoảng cách giữa các đối tượng Khi chuyển ứng dụng sang một màn hình cókích thước với màn hình thiết kế ban đầu thì vị trí của các đối tượng sẽ khôngcòn được chính xác như ban đầu
• RetaliveLayout
Layout này cho phép bố trí các widget theo một trục đối xứng ngang hoặc dọc
Để đặt được đúng vị trí thì các widget cần được xác định một mối ràng buộc nào
đó với các 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 một widget hoặc so với layout parent Dựa vào những mối ràng buộc đó
mà RetaliveLayout cũng không phụ thuộc vào kích thước của screen thiết bị.Ngoài ra, nó còn có ưu điểm là giúp tiết kiệm layout sử dụng nhằm mục đíchgiảm lượng tài nguyên sử dụng khi load đồng thời đẩy nhanh quá trình xử lý
Trang 19Hình 1-9 Bố trí widget trong RetaliveLayout
• TableLayout
Layout này được sử dụng khi cần thiết kế một table chứa dữ liệu hoặc cần bố trícác widget theo các row và column Chẳng hạn như, giao diện của một chiếc máytính đơn giản hoặc một danh sách dữ liệu
Trang 20Hình 1-10 Bố trí widget trong TableLayout
1.5.7.Các thành phần giao diện và Widget:
- Có rất nhiều cách mà bạn có thể xem cách bố trí của bạn Sử dụng nhiềuhơn và các loại khác nhau của các view group, bạn có thể cấu trúc views con vàview groups trong vô số cách Xác định các nhóm xem được cung cấp bởiAndroid (gọi là layouts) bao gồm LinearLayout, RelativeLayout, TableLayout,GridLayout và khác Mỗi cung cấp một bộ duy nhất của các thông số bố trí được
sử dụng để xác định vị trí của views con và cơ cấu layout Để tìm hiểu về một sốcác loại khác nhau của các view group được sử dụng cho một layout, đọc Giaodiện đối tượng thường gặp
- Widget là một object View phục vụ như một giao diện để tương tác vớingười dùng Android cung cấp một tập các widgets thực hiện đầy đủ, giống nhưcác button, Checkbox, và text-entry , do đó bạn có thể nhanh chóng xây dựnggiao diện người dùng của bạn Một số widgets được cung cấp bởi Android phứctạp hơn, giống như một date picker, clock, và zoom controls Nhưng nó khônggiới hạn trong các loại widgets được cung cấp bởi các nền tảng Android
-Nếu bạn muốn làm một cái gì thêm cho tùy biến và tạo ra các yếu tố củahành động của bạn, bạn có thể, bằng cách xác định object view của riêng bạnhoặc bằng cách mở rộng và kết hợp các Widget hiện có Một số widget:
Trang 21Thuộc tính android:onClick="touchMe" được dùng để nắm bắt sự kiện click vào
button Khi sự kiện click button xảy ra thì phương thức “touchMe” được khai báotrong thẻ thuộc tính sẽ được gọi Nếu trường hợp phương thức “touchMe” chưa được khai báo trong file mã nguồn tương ứng thì sẽ phát sinh một exception Ngược lại, phương thức “touchMe” sẽ nhận được một đối tham biến là đối tượngView nơi đã phát sinh ra sự kiện Đối tượng View này có thể ép kiểu trực tiếp sang kiểu Button vì thực chất nó là một button, trong file mã nguồn ta có thể khaibáo một hàm như sau:
public void touchMe(View v){
Button me = (Button) v;
Me.setText(“Touched”);
}
d ImageButton
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
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
Trang 22Được dùng để thể hiện một hình ảnh Nó cũng giống như ImageButton, chỉ khác
là không có hình dáng của một cái button Code:
ImageView iv = new ImageView(this);
iv.setImageResource(R.drawable.icon);
Hình 1-11 ImageView và ImageButton
Trang 23f ListView
Được sử dụng để thể hiện một danh sách các thông tin theo từng cell Mỗi cell thông thường được load lên từ một file XML đã được cố định trên đó số lượng thông tin và loại thông tin cần được thể hiện
Để thể hiện được một list thông tin lên một screen thì cần phải có 3 yếu tố chính:
một cấu trúc dữ liệu kiểu danh sách nào
Source vào đúng vị trí hiển thị trong ListView Chẳng hạn, trong DataSource có một trường name và trong ListView cũng có một TextView đểthể hiện trường name này Tuy nhiên, ListView sẽ không thể hiển thị dữliệu trong Data Source lên được nếu như Adapter không gán dữ liệu vàocho đối tượng hiển thị
Source ra một cách trực quan và người dùng có thể thao tác trực tiếp trênđó
Hình 1-12 Minh hoạ cho một ListView
g TextView
TextView ngoài tác dụng là để hiển thị văn bản thì nó còn cho phép định dạng nội dung bằng thẻ html
Trang 24TextView textView = (TextView)findViewById(R.id.textView);
android:inputType = “…” sử dụng để xác định phương thức nhập cho EditText
Chẳng hạn như khi bạn muốn một ô để nhập password hay một ô để nhập Email
thì thuộc tính này sẽ làm điều đó
android:singleLine = “true” EditText của bạn sẽ trở thành một TextField, ngược lại sẽ là TextBox
Trang 25l Quick Search Box
Một trong những tính năng mới trong phiên bản Android 1.6 đó là Quick Search Box Đây là khuôn khổ tìm kiếm mới trên toàn hệ thống Android, điều này làm cho người dùng có thể nhanh chóng tìm kiếm bất cứ thứ gì có trên chiếc điện thoại Android của họ và cả các tài nguyên trên web khi họ đang online Nó tìm kiếm và hiển thị kết quả tìm kiếm ngay khi bạn đang gõ Nó cũng cung cấp các kết quả từ các gợi ý tìm kiếm web, danh sách doanh nghiệp địa phương, và thôngtin khác từ Google, chẳng hạn như báo giá cổ phiếu, thời tiết, và tình trạng
chuyến bay Tất cả điều này có sẵn ngay từ màn hình chủ, bằng cách khai thác trên Quick Search Box (QSB)
Trang 26Hình 1-13Minh hoạ Quick Search Box
1.5.8.Bắt sự kiện trong Android:
Một khi bạn đã thêm một số Views/widgets đến giao diện, có thể bạnmuốn biết về sự tương tác của người dùng với họ, vì vậy bạn có thể thực hiệnhành động Để được thông báo về UI events người dùng, bạn cần phải làm mộttrong hai điều:
Xác định một sự kiện nghe và đăng ký nó với các View Các class View có
chứa một tập hợp các giao diện lồng nhau đặt tênOn<something>Listener, đều
có một phương pháp gọi lại được gọi là On<something>()
Ví dụ.View.OnClickListener (để xử lý "nhấp chuột" trên một View), View.OnTouchListener ( để xử lý các sự kiện màn hình cảm ứng trong một View), và View.OnKeyListener (để xử lý thiết bị ép quan trọng trong một
View) Vì vậy nếu bạn muốn View của bạn được thông báo khi nó là " clicked"
(chẳng hạn như khi một nút được chọn), thực hiện và xác định OnClickListener của nó gọi method onClick() (nơi bạn thực hiện các hành động sau khi nhấp chuột), và đăng ký nó vào Xem với setOnClickListener()
Ghi đè một callback method hiện cho View Đây là những gì bạn nên làm
gì khi bạn đã thực hiện lớp View của riêng bạn và muốn lắng nghe cho các sựkiện cụ thể xảy ra trong nó Ví dụ về các sự kiện bạn có thể xử lý bao gồm màn
hình là touched onTouchEvent() khi trackball là di chuyển onTrack ballEvent() hoặc khi một phím trên thiết bị được nhấn onKeyDown() Điều này
cho phép bạn xác định các hành vi mặc định cho từng sự kiện bên trong tuỳchỉnh View của bạn và xác định xem sự kiện này cần được thông qua ngày đểView con khác Một lần nữa, đây là những callbacks View class, do đó, cơ hộiduy nhất của bạn để xác định đó là khi bạn xây dựng một phần tùy chỉnh
1.5.9.Menu:
Menu đơn có một phần quan trọng của giao diện người dùng trong mộtứng dụng Menus cung cấp một giao diện đáng tin cậy cho thấy rằng các chứcnăng ứng dụng và cài đặt Trong trình đơn ứng dụng phổ biến nhất là tiết lộ bằngcách bấm phím MENU trên thiết bị Tuy nhiên, bạn cũng có thể thêm Context
Trang 27Menus, có thể hiển thị khi người sử dụng máy nhấn và nắm giữ phím trên mộtmục Thực đơn cũng được hệ thống phân cấp cấu trúc bằng cách sử dụng mộtxem, nhưng bạn không xác định cấu trúc này cho mình.
Thay vào đó, bạn xác định onCreateOptionsMenu() or
onCreateContext Menu() gọi method cho hoạt động của bạn và tuyên bố
các mục mà bạn muốn bao gồm trong menu của bạn Trong một thời gian thíchhợp, Android sẽ tự động tạo ra hệ thống View phân cấp cần thiết cho menu, vàrút ra mỗi trong mỗi menu items đó
Menus cũng xử lý các sự kiện riêng của nó, do đó không cần phải đăng ký
sự kiện listeners trên các item trong menu của bạn Khi một item trong menu của
bạn được chọn, onOptionsItemSelected() hoặc
onOptionsItemSelected(),onContext
ItemSelected() method onContextItemSelected() sẽ được gọi bằng framework.
Và cũng giống như layout có tùy chọn để khai báo các menu item trong một tệptin XML
Có 2 cách tạo một MenuOptions:
• Tạo bằng code:
public class Main extends Activity {
private int searchBtnId = Menu.FIRST;
private int scheduleBtnId = Menu.FIRST + 1;
private int playBtnId = Menu.FIRST + 2;
private int stopBtnId = Menu.FIRST + 3;
private int group1Id = 1;
private int group2Id = 2;
Trang 28menu.add(group1Id,searchBtnId ,searchBtnId,"Search");
menu.add(group2Id,scheduleBtnId,scheduleBtnId,R.string.schedule);
Trang 29<item android:title="Sub item 2"
android:id="@+id/item02" android:orderInCategory="2"/>
Thỉnh thoảng bạn sẽ muốn populate một view group với một số thông tin
mà không thể hard-coded được, thay vào đó, bạn muốn bind để xem một nguồn
dữ liệu bên ngoài Để làm điều này, bạn sử dụng một AdapterView xem như làview group của bạn và View con được khởi tạo và populated với dữ liệu từAdapter Các đối tượng AdapterView là một implementation của ViewGroup xácđịnh những view con của nó dựa trên một đối tượng Adapter nhất định Adaptercác hành vi như là chuyển phát nhanh giữa các nguồn dữ liệu của bạn (có lẽ làmột mảng của chuỗi bên ngoài) và AdapterView, hiển thị nó trong đó Có một số
Trang 30hiện thực của class Adapter, cho nhiệm vụ cụ thể, chẳng hạn như CursorAdapterviệc đọc dữ liệu cơ sở dữ liệu từ một Cursor, hoặc một ArrayAdapter đọc từ mộtmảng tùy ý
1.6 Ứng dụng
1.6.1.Ứng dụng Flashlight:
Đây là một ứng dụng nhỏ thay cho ứng dụng Helloword để khởi độngAndroid nhưng đôi khi cũng rất có ích trong cuộc sống Chẳng hạn như khi độtngột mất điện ta có thể cần một chút ánh sáng để soi đường hoặc tìm một vậtdụng nào đó Trông ứng dụng sẽ như thế này:
Hình 1-15 ứng dụng FlashLightBắt đầu ứng dụng:
Bước 1:Vào File -> New-> Android project -> đặt tên là flashlight
Bước 2: Định dạng màu sắc và xâu kí tự trong file main.xml (trong thư mục
values)
main.xml
Trang 31<?xmlversion="1.0" encoding="utf-8"?>
<resources>
<stringname="hello">Den sang!</string>
<stringname="app_name">Flashlight</string>
<colorname="white">#FFFFFF</color>
<colorname="black">#000000</color>
</resources>
Bài trí giao diện cho ứng dụng:
File main.xml (Nằm trong thư mục layout):
<?xmlversion="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"
<?xmlversion="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"
Trang 32public class FlashlightActivity extends Activity {
/** Called when the activity is first created */
Trang 33CHƯƠNG 2:
PHÂN TÍCH CHƯƠNG TRÌNH MÁY TÍNH SỐ HỌC
2.1 Yêu cầu bài toán:
Xây dựng máy tính khoa học dựa theo các chức năng của Calculator trong windows
Trang 34Xây dựng được các chức năng cơ bản của máy tính khoa học
Tính toán được biểu thức ví dụ: (a +b)/2-4*(b-c)
Xử lý được một số vấn đề về số lớn
Trang 352.2 Cơ sở lý thuyết:
Ký pháp Balan:
Thông thường những việc tính toán như cộng trừ nhân chia hai số thì rấtđơn giản ta có thể viết theo ký pháp trung tố như là a+b,a*b,… Nhưng khi tamuốn tính toán những biểu thức phức tạp hơn hoặc lâp trình để giải những biểuthức dài hơn chẳng hạn như (a+b)*c chẳng hạn thì việc tính toán với máy tính màchúng ta sử dụng ký pháp trung tố sẽ trở nên rắc rồi và phức tạp trong việc xemxét các dấu ngoặc và xem xem phần nào được thực hiện trước trong biểu thức
Ký pháp Balan sẽ giúp chúng ta giải quyết vấn đề này
Ký pháp Balan(Ký pháp tiền tố) do nhà toán học người Balan là JanŁukasiewicz đề xuất vào năm 1920 là một cách viết biểu thức đại số rất thuận lợicho việc thực hiện các phép toán Đặc điểm cơ bản của cách viết này là khôngcần dùng đến các dấu ngoặc và luôn thực hiện từ trái sang phải
Các phương pháp biểu diễn phép toán hai ngôi
Một phép toán hai ngôi trên tập hợp X là một ánh xạ f: X×X → X cho
(a,b)-> f(a,b)€ A Ánh xạ f khi đó thường được ký hiệu bởi *, được gọi là toán
tử, các phần tử a, b được gọi là các hạng tử (còn gọi là toán hạng)
Khi viết biểu thức biểu diễn phép toán đó ta có thể đặt ký hiệu toán tử ở trước(ký pháp tiền tố), sau (ký pháp hậu tố) hoặc giữa (ký pháp trung tố) các toánhạng Thông thường trong các biểu thức đại và số học, ta viết ký hiệu phép toán
giữa hai hạng tử, đó là ký pháp trung tố Ví dụ: a + b, a * b, Khi một biểu thức
có nhiều phép toán, ta dùng các cặp dấu ngoặc "(", ")" và thứ tự ưu tiên các phéptoán để chỉ rõ thứ tự thực hiện các phép toán (Các phép toán đều quy về phéptoán 2 ngôi.)
Ta cũng có thể viết hai hạng tử trước và kí hiệu toán tử sau Chẳng hạn:
a + b viết là a b +, a * b viết là a b *
Cũng có thể viết toán tử trước, hai toán hạng sau Chẳng hạn:
Trang 36Cây biểu diễn biểu thức:
Dùng cây biểu diễn biểu thức có thể thấy rõ trình tự tính toán biểu thức
1. Đọc và ghi nhận giá trị biến a (con trái)
2. Đọc và ghi nhận loại phép toán * (con trái)
3. Đọc giá trị biến b (con trái)
4. Đọc và ghi nhận loại phép toán + (con phải)
Trang 375. Đọc giá trị biến c (con phải) thực hiện phép cộng b + c = x và ghi nhận kết quả x, thực hiện phép nhân a * x = y và ghi nhận kết quả y
Viết tuần tự các đỉnh duyệt theo thứ tự giữa thì ta có dãy
Theo cách này, mỗi khi duyệt một đỉnh
1. Nếu là lá bên trái (biến hoặc hằng) thì ghi nhận giá trị của biến
2. Nếu là toán tử thì lưu dạng của toán tử
3. Nếu là con phải và lá thực hiện phép tính theo toán tử đã lưu ở đỉnh chagiữa các giá trị đã lưu tại con phải và giá trị mới đọc tại con trái, ghi kết quảvào đỉnh cha
Trang 38 Hoặc duyệt cây biểu thức trên theo thứ tự sau: Mỗi đỉnh được duyệt saukhi cả hai đỉnh con đã được duyệt Khi đó mỗi khi duyệt một đỉnh trong tathực hiện toán tử ghi tại đỉnh này với giá trị của hai con của đỉnh ấy.
Thứ tự duyệt các đỉnh khi đó sẽ là:
a b c + * d 5 ^ - (2)
Khi duyệt theo thứ tự sau, việc thực hiện phép tính tiến hành theo quy tắc:
Mỗi khi thăm một đỉnh thì:
1. Nếu là lá thì ghi nhận giá trị của biến
2. Nếu là đỉnh trong thì thực hiện toán tử ghi ở đỉnh này vào các giá trị ghi ở haiđỉnh con, ghi kết quả vào chính đỉnh này
Với dãy (1) nếu không dùng đến dấu ngoặc, có thể có hai cây biểu thức khácnhau cho cùng một dãy đỉnh khi duyệt thứ tự giữa Còn với dãy (2) cùng với lưu
ý rằng các biến và hằng luôn được biểu diễn bằng các lá, các toán tử luôn biểudiễn bởi các nút trong, từ mỗi dãy dạng (2) ta luôn dựng lại được cây biểu thức
duy nhất theo giải thuật sau: Khi độ dài dãy lớn hơn 1, duyệt từ bên trái sang, nếu gặp một phần tử là toán tử, thì lấy hai phần tử đứng trước nó ra khỏi dãy chuyển thành hai con của phần tử ấy (theo đúng thứ tự) Vì thế biểu thức viết bởi
dãy (2) là hoàn toàn xác định
Chuyển đổi từ biểu thức bình thường sang ký pháp Balan
Việc tính giá trị một biểu thức viết dưới dạng phép toán sau rất thuận tiện nhưtrên, tuy nhiên, theo thói quen thông thường, việc nhập biểu thức đó vào lạikhông dễ, người ta thường nhập vào một công thức dưới dạng thông thường(phép toán giữa) rồi dùng chương trình chuyển đổi nó sang dạng phép toán sau.Chúng ta hãy xét biểu thức trong ví dụ trên
Q=a*(b+c)-d^5
Kí hiệu biểu thức ghi dưới dạng phép toán sau là P Trong quá trình chuyển đổi ta dùng một stack S để lưu các phần tử trong P chưa sử dụng đến Khi đọc
từ trái sang phải biểu thức Q la lần lượt có:
1 Đọc và ghi nhận giá trị a, ghi giá trị a vào P Vậy P = "a".
2 Đọc toán tử "*" Đưa toán tử này vào stack S: S = "*"
Trang 393 Đọc dấu ngoặc mở "(", đưa dấu ngoặc này vào stack: S = "*(".
4 Đọc hạng tử b, đưa b vào P: P= "a b"
5 Đọc toán tử "+", đặt "+" vào stack: S ="*(+"
6 Đọc hạng tử "c", đưa c vào cuối P: P="a b c"
7 Đọc dấu ngoặc đóng ")" Lần lượt lấy các toán tử ở cuối stack ra khỏi stackđặt vào cuối P cho đến khi gặp dấu ngoặc mở "(" trong stack thì giải phóng
nó: S= "*"; P="a b c +"
8 Đọc toán tử "-" Cuối stack S có toán tử "*" có mức ưu tiên lớn hơn toán tử
"-", ta lấy toán tử "*" ra khỏi stack, đặt vào cuối P, đặt toán tử "-" vào
stack: S="-"; P=" a b c + * "
9 Đọc hạng tử d, đưa d vào cuối P P="a b c + * d"
10 Đọc toán tử "^", đưa toán tử "^" vào cuối stack: S="-^"
11 Đọc hằng số 5, đưa 5 vào cuối P: P="a b c + * d 5"
12 Đã đọc hết biểu thức Q, lần lượt lấy các phần tử cuối trong stack đặt vào P cho đến hết P="a b c + * d 5 ^ -".
Trang 40CHƯƠNG 3:
3.1.Giao diện:
Hình 3-1 Giao diện chính của ứng dụng
Với một giao diện với rất nhiều nút bấm hẳn việc đầu tiên ta nghĩ đến khi thiết kế
đó là việc sử dụng các nút bấm và bắt sự kiện Và phải nói rằng việc sử dụng cácnút bấm thực sự rất khó chịu đối với việc xây dựng những ứng dụng kiểu nhưnày sao ta không sử dụng một cách khác dễ chịu hơn? Trong phần thiết kế giaodiện ứng dụng của đồ án tốt nghiệp lần này em không sử dụng các button để thiết
kế nên giao diện kia mà em sẽ sử dụng Gridview