1. Trang chủ
  2. » Công Nghệ Thông Tin

Xây dựng ứng dụng máy tính khoa học cho điện thoại cầm tay thông minh chạy hệ điều hành android

80 559 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

Định dạng
Số trang 80
Dung lượng 6,02 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

Thái nguyên, ngày tháng 06 năm 2012 Sinh viên

Hoàng Thị Thu Hương

Trang 3

LỜ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 4

MỤC LỤC

Trang 5

LỜ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 6

Hì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 7

trườ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 9

1.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 10

1.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 11

1.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 12

Lifecycle 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 14

Hì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 15

1.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 16

layouts", 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 18

Hì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 19

Hì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 20

Hì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 21

Thuộ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 23

f 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 24

TextView 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 25

l 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 26

Hì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 27

Menus, 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 28

menu.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 30

hiệ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 32

public class FlashlightActivity extends Activity {

/** Called when the activity is first created */

Trang 33

CHƯƠ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 34

Xâ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 35

2.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 36

Câ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 37

5. Đọ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 39

3 Đọ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 40

CHƯƠ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

Ngày đăng: 20/04/2017, 22:21

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w