Vùng 3 ta có thể chọn cách hiển thị theo nằm ngang nằm đứng, phóng to thu nhỏ, căn chỉ control, lựa chọn loại thiết bị hiển thị....
- Vùng 4.
Khi màn hình có nhiều control thì vùng 4 này trở lên hữu ích, nó cho phép hiển thị giao diện theo dạng cấu trúc cây, nên ta dễ dàng quan sát và lựa chọn control khi chúng bị chồng lập trên giao diện (vùng 3).
- Vùng 5.
Vùng này rât quan
trọng, đây là vùng cho phép thiết lập trạng thái hay thuộc tính cho các Control trên giao diện.
- Vùng 6
Là vùng các chức năng quan trọng thường dùng trong Android Studio.
Chạy ứng dụng và Debug ứng dụng:
Hình 24: Các nút chức năng của Android studioHình 22: Các control hiên thị theo dạng câu trúc cây Hình 22: Các control hiên thị theo dạng câu trúc cây
toggleĐutton - " New To g g I e Button
Properties fontFamily f 0 ntF e atu re Setti n q 5 gravity height
hinti m p 0 rta ntF 0 rAc c e 5 5 i b i labelFor letterSpacing lines B Device Screen F RelativeLayout ỊÃbỊ textView @5tring/hello_world
btnOKDrThdnh (Button) - "New Buttí
/bó checkBox "New CheckBox"
ComponentTree
lanh
Quản lý máy ảo (AVD Manager)
Hình 25: Giao diện quản lý máy ảo
Quản lý Android SDK Manager (thường dùng đê cập nhật)
Hình 26: Quản lý Android SDK Manager
Hình 27: Quản lý Android Device Manager
2.3.3 Tạo giao diện chương trình trong android studio
a. Giới thiệu android Layout
Layout là nơi chứa các control lên giao diện và mỗi layout có một cách sắp xếp các control khác nhau, vì vậy với mỗi cấu trúc giao diện khác nhau ta nên chọn layout cho phù hợp. Sau đây là một số layout cơ bản cho để ta thiết kế giao diện.
- FrameLayout.
Là loại layout cơ bản nhất, nó sẽ đqợc dùng nhiều khi ta sử dụng vẽ giao diện nâng cao sau này. Khi ta kéo các control vào thì mặc định các control sẽ nằm ở vị trí trên cùng bên trái. Các control khi đqợc kéo vào framelayout sẽ bị
đè lên nhau, control sau sẽ đè lên control trqớc. Cách duy nhất để căn cáccontrol vào giữa là sử dụng thuộc tính android:layout_gravity="center". Ta có
Hình 28: Giao diện Framelayout
- LinearLayout.
Layout này cho phép ta vẽ giao diện theo 2 hqớng, từ trái qua phải hoặc từ trên xuống dqới.Để xét chiều cho các control trong layout ta sử dụng thuộc tính
orientation.
• Android:orientation="horizontar : xếp các control từ trái sang phải (theo cột).
• Android:orientation="vertical" : xếp các control từ trên xuống dqới (theo hàng).
Với những giao diện có độ phức tạp vừa phải thì dùng LinearLayout là rất hiệu quả, rất thuận tiện trong thiết kế và đi bảo trì ứng dụng sau này. Sau đây là đoạn XML demo cách sử dụng layout này:
- RelativeLayout.
Layout này cho phép ta sắp xếp các control theo vị trí tqơng đối giữa các
control khác kể cả control chứa nó. Khi gặp những layout có độ phức tạp cao, có nhiều giao diện nhỏ thì sử dụng RelativeLayout là lựa chọn tốt nhất. Một vài chú ý khi sử dụng layout này:
• Các control đều có id riêng, việc đặt tên id phải rõ rang dễ hiểu.
• Các control đqợc sắp xếp dựa vào id của các control khác.
• Các control có sự ràng buộc và tqơng tác với nhau nên khi thay đổi một control sẽ làm thay đổi vị trí của mọi control khác. Vì vậy rất khó trong việc bảo trì nếu giao diện q phức tạp.
Hình 29: Giao diện LinearLayout theo hàngTheo hàng: Theo hàng:
Ta có thể tham khảo đoạn XML demo sau để hình dung dễ hơn:
Hình 31: Giao diện RelativeLayout
b. Giới thiệu một số android View cơ bản
- TextView: là view sử dụng để hiển thị text màn hình. TextView đqợc
định nghĩa bởi thẻ <TextView> trong xml.
- EditText: là view dùng để lấy giá trị từ ngqời dùng nhập vào. EditText
đqợc định nghĩa bởi thẻ <EditText>trong xml.
- ImageView: là một view sử dụng rất nhiều trong ứng dụng android,
ImageView sử dụng để hiển thị hình ảnh.
- Button: là view đqợc sử dụng khá nhiều trong android, hầu nhq sử dụng
ở mọi nơi cùng với EditText, TextView. Button có chức năng là làm nhiệm vụ nào đó khi mà ngqời dùng click trong phqơng thức onClick.
- ListView: đqợc tạo từ một danh sách các Listltem. Listltem là một dòng
(row) riêng lẻ trong listview nơi mà dữ liệu sẽ đqợc hiển thị. Bất kỳ dữ liệu nào trong listview chỉ đqợc hiển thị thơng qua listltem. Có thể coi listview nhq là một nhóm cuộn của các Listltem.
c. Bắt và xử lý sự kiện trên giao diện.
Sự kiện là một cách hữu ích để thu thập dữ liệu về sự tqơng tác của ngqời dùng với các thành phần tqơng tác của ứng dụng. Giống nhq bấm vào một nút hoặc chạm vào màn hình cảm ứng, vv. Ta có thể nắm bắt những sự kiện trong chqơng trình và có những xử lý thích hợp theo u cầu. Có hai khái niệm liên quan đến quản lý sự kiện Android:
-Event Listeners là một interface. Event Listeners đqợc sử dụng để đăng ký sự kiện cho các thành phần trong UI. (Đăng ký sự kiện). Trong các
giao tiếp event listener có những phqơng thức sau đây:
• onClick(): Thuộc View.OnClickListener. Nó đqợc gọi khi ngqời dùng hoặc chạm vào item (khi ở chế độ cảm ứng), hoặc lựa chọn vào item với các phím điều hqớng và nhấn nút "enter" phù hợp.
• onLongClick(): Thuộc View.OnLongClickListener. Nó đqợc gọi khi ngqời dùng chạm và giữ item (khi ở chế độ cảm ứng), hoặc lựa chọn vào item với các phím điều hqớng sau đó nhấn và giữ phím "enter".
• onFocusChange(): Thuộc View.OnFocusChangeListener. Nó đqợc gọi khi ngqời dùng điều hqớng ra khỏi item, bằng cách sử dụng phím điều hqớng.
• onKey(): Thuộc View.OnKeyListener. Nó đqợc gọi khi ngqời dùng lựa chọn và nhấn lên item.
• onTouch(): Thuộc View.OnTouchListener. Nó đqợc gọi khi ngqời dùng thực hiện một hành động xác định đủ điều kiện nhq là một sự kiện cảm ứng, bao gồm việc nhấn, thoát ra, hoặc bất kỳ cử chỉ chuyển động vẽ trên màn hình (bên trong phạm vi của item).
• onCreateContextMenu():
Thuộc View.OnCreateContextMenuListener. Nó đqợc gọi khi một menu ngữ cảnh (Context Menu) đang đqợc xây dựng (là kết quả của một "long click"). Xem thêm thông tin về context menus trong hqớng dẫn phát triển Menus.
Ví dụ dưới đây cho thấy làm thế nào để đăng ký một bộ bắt sự kiện khi nhấp chuột vào một Button.
// Create an anonymous implementation of OnClickListener
private OnClickListener mCorkyListener = new OnClickListenerO { pubỉic void onClick(View v) {
//do something when the button is clicked
} };
protected void onCreate(Bundle savedValues) {
// Capture our button trom layout
Button button = (Button)findViewById(R.id.corky);
// Register the onClick ỉistener with the implementation above
button.setOnClickListener(mCorkyListener);
} ________________________________________________________________________________
Ta cũng có thể tìm thấy cách thuận tiện hơn để bổ sung OnClickListener nhq một phần Activity. Ví dụ:
public class ExampleActivity extends Activity implements OnClickListener { protected void onCreate(Bundle savedValues) {
Button button = (Button)findViewById(R.id.corky);
button.setOnClickListener(this);
}
// Implement the OnCỉỉckListener callback
public void onClỉck(View v) {
// do something when the button is clicked
}
} __________________________________________________________________________________________
Chú ý rằng lời gọi onClick() trong ví dụ trên khơng trả về giá trị, nhqng
các phqơng thức của bộ nghe sự kiện khác phải trả lại một biến kiểu boolean. Lý do phụ thuộc vào sự kiện này. Đây là một vài lý do:
• onLongClick() - Trả về một giá trị kiểu boolean để cho biết ta đã dùng sự kiện này và nó khơng cần thực hiện "long click") thêm nữa. Trả về giá trị TRUE để chỉ ra rằng ta đã xử lý sự kiện này và nó nên dừng lại ở đây; trả về FALSE nếu ta khơng xử lý nó và / hoặc sự kiện nên chuyển tới bất kỳ bộ nghe sự kiện on-click nào khác.
• onKey() - Trả về một giá trị kiểu boolean để cho biết ta đã dùng sự kiện này và nó khơng cần đqợc thực hiện thêm. Trả về giá trị TRUE để chỉ ra rằng ta đã xử lý sự kiện này và nó nên dừng lại ở đây; trả về
FALSE nếu ta khơng xử lý nó và / hoặc sự kiện nên chuyển tới bất kỳ
bộ nghe sự kiện on-key nào khác.
• onTouch() - Trả về một giá trị kiểu boolean để cho biết: liệu bộ nghe của ta đã dùng sự kiện này hay chqa. Điều quan trọng là sự kiện này có thể có nhiều hành động nối tiếp nhau. Vì vậy, nếu trả về FALSE, ta biết rằng ta đã không sử dụng và cũng không quan tâm đến hành động tiếp theo từ sự kiện này. Nhq vậy, ta không đqợc gọi tới bất kỳ thao tác nào khác bên trong sự kiện này.
- Event Handlers - Là phqơng thức xử lý khi phát sinh sự kiện. (Xử lý sự kiện)
Nếu ta đang xây dựng một thành phần tùy chỉnh từ View, ta sẽ phải định
nghĩa một số phqơng thức sử dụng nhq của xử lý sự kiện mặc định. Trong tàiliệu về Custom Components, ta sẽ tìm hiểu một số callbacks thqờng đqợc sử
dụng để xử lý sự kiện, bao gồm:
• onKeyDown(int, KeyEvent) - Đqợc gọi khi một sự kiện nhấn phìm mới xảy ra.
• onKeyUp(int, KeyEvent) - Đqợc gọi khi mọt sự kiện thả phím xảy ra.
• động trackball xảy ra.
• onTouchEvent(MotionEvent) - Được gọi khi một sự kiện chuyển động màn hình cảm ứng xảy ra.
• onFocusChanged(boolean, int, Rect) - Đqợc gọi khi view được chọn (focus) hoặc bỏ chọn.
Có một số phqơng thức khác mà ta nên biết, chúng không phải là một phần của lớp View, nhqng có thể trực tiếp tác động đến cách bạn có thể xử lý các sự kiện. Vì vậy, khi quản lý sự kiện phức tạp hơn bên trong một layout, ta nên xem xét các phqơng pháp sau:
• Activity.dispatchTouchEvent(MotionEvent) - Điều này cho
phép Activity bắt tất cả các sự kiện chạm màn hình trqớc khi chúng đqợc gửi đến cửa sổ.
• ViewGroup.onInterceptTouchEvent(MotionEvent) - Điều này cho phép ViewGroup xem các sự kiện nhờ chúng được gửi đến các View con.
• ViewParent.requestDisallowInterceptTouchEvent(boolean) - Gọi điều này trên View cha để xác định rằng nó khơng nên bắt các sự kiện chạm màn hình với onInterceptTouchEvent(MotionEvent)
2.3.4 Firebase realtimedatabase
Giới thiệu: Có nhiều cách hiểu về Firebase khi đứng trên các quan điểm khác nhau, sau đây là 2 định nghĩa cơ bản.
• Firebase là một nền tảng di động, website giúp bạn nhanh chóng phát triển các ứng dụng chất lượng cao, phát triển ứng dụng cho người dùng quy mơ lớn.
• Firebase là một dịch vụ hệ thống backend được Google cung cấp sẵn trên nền tảng Android , IOS, website.
2.3.5 Lợi ích khi sử dụng Firebase
Xây dựng ứng dụng nhanh
chóng mà khơng tốn thời gian, nhân lực đê quản
Xây dựng ứng dụng nhanh chóng mà khơng tốn thời gian, nhân lực đê quản lý hệ thống và cơ sơ sở hạ tầng phía sau: Firebase cung cấp cho bạn chức năng như phân tích, cơ sở dữ liệu, báo cáo hoạt động và báo cáo các sự cố lỗi đê bạn có thê dễ dàng phát triên, định hướng ứng dụng của mình vào người sử dụng nhằm đem lại các trải nghiệm tốt nhất cho họ.
2.4 Môi trường phát triển ứng dụng Smartphone:
5 hệ điều hành phổ biến hiện nay:Android,IOS,Windows Phone,Blackberry OS, Firefox OS.
❖ Android
Ưu điểm:
+ Có mã nguồn mở, khả năng tuỳ biến cao, có thê tùy ý chỉnh sửa mà khơng có sự can thiệp từ Google.
+ Kho ứng dụng Google Play Store đồ sộ.
+ Khả năng đa nhiệm, chạy cùng lúc nhiều ứng dụng cao.
Nhược điểm:
+ Dễ nhiễm phần mềm độc hại và virus.
+ Kho ứng dụng quá nhiều dẫn đến khó kiêm sốt chất lượng => thiếu các ứng dụng thật sự tốt.
+ Sự phân mảnh lớn.
+ Cập nhật không tự động với tất cả thiết bị.
❖ IOS
Ưu điểm:
+ Nền tảng ổn định.
+ Ứng dụng trên IOS hoạt động rất mượt mà. + Độ tin cậy và tính bảo mật cao.
Nhược điểm:
+ Trao đổi dữ liệu cần phải qua iTunes nên dễ gây bất tiện, tốn thời gian. + Khả năng tuỳ chỉnh còn hạn chế.
+ iOS chỉ hoạt động trên các thiết bị công nghệ độc quyền của Apple.
+ Windows Phone
+ Giao diện quen thuộc, dễ sử dụng. + Khả năng đồng bộ danh bạ, email tốt.
+ Có phần mềm bản đồ Here Maps khá tốt, có thể xem offline được.
Nhược điểm:
+ Windows Phone không cho phép thay đổi giao diện, chủ đề (themes) nên dễ gây chán. + Kho ứng dụng nghèo nàn, ứng dụng miễn phí rất ít.
+ Khơng thể đổi DNS (hay IP) để vào 1 số web bị chặn. + Blackberry OS
Ưu điểm:
+ Hoạt động ổn định, giao diện đơn giản.
+ hỗ trợ Push Mail, xử lý công việc tốt và tính bảo mật rất cao. + Bàn phím QWERTY giúp soạn thảo nhanh và chính xác.
+ Blackberry OS cho khả năng nén dữ liệu xuống chỉ còn bằng một nửa kích thước ban đầu, giúp tiết kiệm chi phí băng thơng.
+ Tính bảo mật cao.
Nhược điểm:
- BlackBerry OS khơng thân thiện và khó sử dụng đối với những người khơng am hiểu công nghệ.
- Firefox OS
Ưu điểm:
+ Giao diện dễ sử dụng, trơng giống như một sự kết hợp hài hịa giữa Android và iOS. + Firefox OS có những thư mục rất thơng minh, có thể tự thu thập những ứng dụng, game
theo từng thể loại khác nhau, cũng như tính chất những cơng việc riêng biệt mà bản thân nó được phát triển. — Nhược điểm:
+ Giao diện Firefox OS đã vay mượn khá nhiều từ iOS, thường gặp nhiều bất cập bởi phụ thuộc nhiều vào nút Home (màn hình chủ).
2.5 Ứng dụng của ngôn ngữ Java
- Các ứng dụng cho hệ điều hành Android
- Các ứng dụng bảo mật cao: Java là ngơn ngữ lập trình có tính bảo mật cao nên nó
thường được sử dụng vào trong các dịch vụ tài chính, ngân hàng.
- Các ứng dụng web Java: Lập trình Java khơng chỉ được sử dụng trên thiết bị di động mà còn được biết đến là nền tảng của của các ứng dụng website.
- Các công cụ phần mềm: Hiện nay có rất nhiều các cơng cụ phát triển và phần mềm hữu ích được viết bằng Java, ví dụ: Eclipse, InetelliJ Idea và Netbans IDE.
- Khái niệm về lập trình hướng đối tượng trong java: Lập trình hướng đối tượng (Object Oriented Programing - OOP) là một phương pháp để thiết kế một chương trình bởi sử dụng các lớp và các đối tượng.
- Java là một ngơn ngữ lập trình hướng đối tượng vì vậy nó cũng hỗ trợ các đặc tính của lập trình hướng đối tượng: Đa hình (Polymorphism) Thừa kế (Inheritance) Đóng gói (Encapsulation) Trừu tượng (Abstraction)
- Đối tượng là một thực thể có trạng thái và hành vi. Nó có thể mang tính vật lý hoặc logic.
- Lớp (Class) có thể xem lớp như một khn mẫu (template) của đối tượng (Object).
- Package: package (gói) trong java là một nhóm các kiểu tương tự của các lớp, giao diện và các package con .
- Package trong java có thể được phân loại theo hai hình thức, package được dựng sẵn và package do người dùng định nghĩa.
- Có rất nhiều package được dựng sẵn như java, lang, net, io, util, sql, ... Package do người dùng tự định nghĩa
- Constructor: constructor trong java là một dạng đặc biệt của phương thức được sử dụng để khởi tạo các đối tượng.
- Java Constructor được gọi tại thời điểm tạo đối tượng. Nó khởi tạo các giá trị để cung cấp dữ liệu cho các đối tượng.
- Khai báo của Constructor giống với khải báo của method (phương thức). Nó phải có
cùng tên với class (lớp) và khơng có giá trị trả về.
- Có 2 kiểu của constructor: Constructor mặc định (khơng có tham số truyền vào - default constructors). Constructor tham số (parameterized constructors).
- Phạm vi truy cập (Access modiíier) Có hai loại modiíier trong java: access modiíiers và non-access modifiers.
- Có 4 kiểu của java access modiíiers: private (Mặc định) protected public
- Các non-access modiíiers: static, abstract, synchronized, native, volatile, transient, v.v..
2.6 Các thành phần ứng dụng của android
2.6.1 Activity:
Activity là một trong 4 thành phần quan trọng của ứng dụng Android gồm: Activity, Service, Content Provider, Broadcast receivers.
- Activity là gì?
Mỗi Activity thường hoạt động độc lập với nhau nhưng có thể tương tác và truyển dữ liệu qua nhau thơng qua Intent.
Chính vì Activity hoạt động độc lập nên sẽ có vịng đời riêng từ lúc được khởi tạo cho đến lúc