Các thành phần trong một project androidBắt đầu với việc tạo một project android , ta vào menu File > new > android application project , nhập tên project và tạo như bình thường.. Có rất
Trang 1Viện Công Nghệ Thông Tin & Truyền Thông
Bộ Môn : Project 1
Đề Tài : Lập trình Android căn bản
Giảng Viên Hướng Dẫn :TS Bành Thị Quỳnh Mai Sinh Viên Thực Hiện : Vũ Ngọc Tiến - 20133971
Trang 2Mục lục -2
Lời Nói Đầu -3
1,Các thành phần trong một project android -4
2,Một số chương trình đơn giản -11
Mục Lục
Trang 3Lời Nói Đầu
Từ rất lâu rồi , khi con người còn ở trong thời kì chưa có công nghệ , mọi thứ đầu phải thực hiện thông qua sự tính toán đơn thuần và kinh nghiệm của con người, thế rồi cuộc cách mạng công nghiệp diễn ra và mang đến cho nhân loại các máy móc thiết bị giúp con người tối thiểu hóa sự vất vả trong lao động chân tay và dần dần là lao động trí óc Từ những sự sáng tạo của con người máy vi tính đã ra đời , phát triển từng bước và kèm theo đó là khái niệm hệ điều hành
Và cho đến thời nay, hệ điều hành không còn là cái gì quá xa lạ với mỗi người chúng ta, nó không chỉ có trong mỗi chiếc máy vi tính đơn thuần nữa mà đã được con người nghiên cứu và ứng dụng vào các thiết bị thông minh như điện thoại, máy tính bảng Một trong số các hệ điều hành đó là Android.
Android là một hệ điều hành thông minh với cực nhiều những chức năng tương tác với người dùng , đa năng hóa một chiếc điện thoại đơn thuần , lập trình về Android theo đó cũng phát triển không ngừng và đang dần trở nên rộng rãi Bài báo cáo sau đây sẽ trình bày những nghiên cứu về lập trình Android cơ bản và một số chương trình minh họa chạy trên hệ điều hành này.
Về lịch sử phát triển và cài đặt em xin phép không nói đến Chắc chắn bài báo cáo không thể tránh khỏi những thiếu sót , kính mong được sự chỉ giáo của các thầy cô và các bạn Xin chân thành cảm ơn !!!!!!
Trang 41 Các thành phần trong một project android
Bắt đầu với việc tạo một project android , ta vào menu File > new > android application project , nhập tên project và tạo như bình thường Có rất nhiều trường hợp khi tạo project
để ở các bản SDK có hỗ trợ android-support-v7 sẽ gặp lỗi và lỗi này khá khó sửa nên khi tạo mới 1 project nên để minimun required SDK ở API15 vì bản này không hỗ trợ
support-v7 nên sẽ không gặp lỗi đó và tốc độ xử lí sẽ nhanh hơn nhiều
Sau đây là hinh ảnh khi ta tạo xong một project android :
1 project android sau khi tạo sẽ mở ra 2 tab Activity , 1 file xml và 1 file java ta sẽ thiết kế
và xử lí giao diện của project trên file xml , ở file xml sẽ có 2 phần , 1 phần là graphics layout để ta kéo thả và thiết kế trực tiếp giao diện của project
Trang 5Trên đây là các component mà phần mềm hỗ trợ người dùng thiết kế giao diện , khi cần bất kìcomponent nào người dùng chỉ việc kéo thả vào giao diện , tuy nhiên nhiều lúc giao diện sẽ khó thiết kế vào những vị trí mà ta mong muốn do mặc định của các layout , từ đó ta sẽ phải thiết kế bằng phần code của file xml :
Phần code của giao diện
Vậy layout là gì mà lại có những mặc định như vậy ? Layout thực chất cũng giống như một ContentPane trong java desktop , là phần nền để đưa các component lên trên đó và quản lí nó theo một trật tự nhất định
XML file có 5 loại layout :
• FrameLayout:Layout đơn giản nhất, thêm các thành phần con vào góc trên bên trái của màn hình
• LinearLayout:thêm các thành phần con theo 1 chiều nhất định (ngang hoặc dọc) Đây là layout được sử dụng nhiều nhất
• RelativeLayout:thêm các thành phần con dựa trên mối quan hệ với các thành phần khác hoặc với biên của layout
• TableLayout:thêm các thành phần con dựa trên 1 lưới các ô ngang và dọc
• AbsoluteLayout:thêm các thành phần con dựa theo tọa độ x, y
Sơ qua về XML(Extensible Markup Language) , thật ra việc thiết kế giao diện với xml không hẳn là chức năng chính của xml Bản chất của XML là một cơ sở dữ liệu lưu trữ theo dạng thẻ , cú pháp của xml gần tương tự với một ngôn ngữ quen thuộc khác là html có điều thẻ trong html là được định nghĩa sẵn còn xml hoàn toàn do người dùng định nghĩa
một đoạn code xml cơ bản
Trang 6tuy nhiên tính bảo mật của nó thấp hơn
một đoạn RSS của báo vnexpress
Đó là sơ qua về file Activity_main.xml, Nhìn chung thì layout vẫn chỉ là 1 giao diện bất động
và không thể tự nó sinh ra các sự kiện được vì vậy ta cần đến các file activity và ở đây project
đã tạo sẵn cho ta 1 file MainActivity.java
thường thì sau khi tạo 1 project android , ấn vào file này ta sẽ thấy bị lỗi do chương trình không tìm được file R như trên , file R ở đây là một file nằm trong packet map với packet chứa các file java mà khi làm việc với project ta sẽ viết ra file R là file mặc định chứa trong
nó tất cả những biến và id của các component trong file xml đã kể trên , nó là trung gian kết nối giữa các file java và các file xml
Trang 7Ta đã thấy file R.java xuất hiện , từ đó lỗi đã được fix Activity thực chất là 1 file.java extenslớp đối tượng activity có sẵn trong thư viện android (vì vậy mới có lệnh
super.OnCreate(savedÍntanedState)) , ở file activity ta sẽ bắt những sự kiện xảy ra khi thực hiện 1 hoạt động nào đó ở layout , 1 project sẽ có rất nhiều layout nên cũng sẽ cần nhiều activity để map với các layout đó và xử lí sự kiện diễn ra ở các layout đó
Activity là phần quan trọng nhất và đóng vai trò chính trong xây dựng ứng dụng Android
Hệ điều hành Android quản lý Activity theo dạng stack: khi một Activity mới được khởi tạo,
nó sẽ được xếp lên đầu của stack và trở thành running activity, các Activity trước đó sẽ bị
tạm dừng và chỉ hoạt động trở lại khi Activity mới được giải phóng
Vòng đời của 1 activity bao gồm 4 trạng thái :
• active (running): Activity đang hiển thị trên màn hình
• paused: Activity vẫn hiển thị (visible) nhưng không thể tương tác (lost focus) VD:
một activity mới xuất hiện hiển thị giao diện đè lên trên activity cũ, nhưng giao diện này nhỏ hơn giao diện của activity cũ, do đó ta vẫn thấy được 1 phần giao diện của activity cũ nhưng lại không thể tương tác với nó
• stop: Activity bị thay thế hoàn toàn bởi Activity mới sẽ tiến đến trạng thái stop
• killed: Khi hệ thống bị thiếu bộ nhớ, nó sẽ giải phóng các tiến trình theo nguyên tắc
ưu tiên Các Activity ở trạng thái stop hoặc pausedcũng có thể bị giải phóng và khi nó
được hiển thị lại thì các Activity này phải khởi động lại hoàn toàn và phục hồi lại trạng thái trước đó
Trang 8Biểu dồ trạng thái của activity
Ngoài Activity thì một chương trình Android còn có những thành phần quan trọng khác
• Service: thành phần chạy ẩn trong Android Service sử dụng để update dữ liệu, đưa ra các cảnh báo (Notification) và không bao giờ hiển thị cho người dùng thấy
• Content Provider: kho dữ liệu chia sẻ Content Provider được sử dụng để quản lý và chia sẻ dữ liệu giữa các ứng dụng
• Intent: nền tảng để truyền tải các thông báo Intent được sử dụng để gửi các thông
báo đi nhằm khởi tạo 1 Activity hay Service để thực hiện công việc bạn mong muốn Ngoài ra Intent còn có một chức năng khá hay khác là truyền tham số giữa các
Activity thông qua các phương thức put và get
• Notification: đưa ra các cảnh báo mà không làm cho các Activity phải ngừng hoạt
động
Tiếp đến là các thành phần chính khác trong project :
Trang 9• 2 thư mục Android 5.0.1 và Android private libraries chứa các thư viện hỗ trợ của
1 project android
• Thư mục res là thư mục chứa các tài nguyên của project android , trong đó có các thư
mục nhỏ như drawable-thư mục chứa các hình ảnh và icon dùng cho project, với các
độ phân giải từ thấp đến cao đều có các thư mục drawable tương ứng
• Thư mục layout sẽ chứa file activity_main.xml mà ta đã nói ở trên cùng với tất cả các
file layout khác mà ta sẽ tạo vào thiết kế cho project
• Tiếp đó là thư mục menu , thư mục này có chứa 1 file main.xml , file này là file chứa
toàn bộ các thông tin về các item menu trong chương trình của ta
• Sau đó là thu mục values chứa các file.xml lưu các giá trị mà ta định nghĩa để sử
dụng nhiều trong chương trình
• Quan trọng nhất là file AndroidManifest.xml , đây có thể coi là file điều khiển của
một ứng dụng android , tất cả những activity muốn thực hiện được đều phải thông quafile này
Trước khi bắt tay vào làm một số chương trình nhỏ có một kĩ thuật đặc biệt quan trọng cần phải biết , đó là kĩ thuật LogCat LogCat dùng để thay thế cho câu lệnh System.Out.Println trong java thông thường , cửa sổ console giờ sẽ dùng với những chức năng khác như hiển thị trạng thái tải chương trình lên máy ảo
Có nhiều loại LogCat nhưng thường được sử dụng nhất là Log.d Cú pháp đơn giản là
Log.d("TagName","Câu muốn in ra");
Để sử dụng một logcat ta phải khai báo nó , bât của sổ logcat ấn vào dấu “+”
Trang 10Một hộp thoại sẽ hiện ra ta sẽ copy tagName mà ta đặt và patse vào 2 ô :
Khi ta chạy đến câu lệnh logcat nó sẽ hiện ra dòng chữ ta muốn in ở các tagname của của sổ logcat
Trang 11Câu lệnh này sẽ giúp ta rất nhiều trong việc kiểm soát chương trinh và gỡ lỗi Đây là kĩ thuật tối quan trọng đối với lập trình Android.
Chương trình đăng nhập
Chương trình nhập vào một tài khoản , nếu đúng thì hiện lên “Đăng nhập thành công” , sai thìhiện lên “Sai tài khoản hoặc mật khẩu”
Đầu tiên tạo môt project tên login , Thiết kế giao diện đơn giản như sau:
ở phần code , cài đặt id như sau :
id ở có thể coi là tên truy cập của một component , id đó sẽ được lưu ở file R.java và dựa vào
đó để file Activity có thể tham chiếu được đến đó
Tiếp theo trong packet activity tạo một class là User với 2 thuộc tính là id và pass :
Trang 12quay sang MainActivity , ta khai báo các biến tương ứng với các component cần xử lí ở layout , thường thì sẽ để tên biến giống với id của các component để dễ thao tác Sau đó tham chiếu đến layout
Tại sao lại phải ép kiểu ở đây ? Nhìn vào câu lệnh findViewById nghĩa là tìm 1 view theo id vậy nên nó sẽ trả về 1 view , view là lớp cha của các lớp như Button hay EditText nên phải
ép kiểu cho nó thành kiểu tương ứng
Tạo 1 tài khoản mặc định , ở đây em để id : tien , password :123456
bắt sự kiện xảy ra khi ta ấn vào nut đăng nhập bằng SetOnClickListener , hiện thông báo bằng Toast :
Trang 13Đầu thiên thiết kế giao diện như sau :
Trang 14chương trình này sẽ nói về giao diện nhiều hơn vì phần code chạy không có gì đặc biệt , Ở đây sử dụng LinearLayout Một số câu lệnh không khó hiểu như backgroud hay textColor , hint em xin phép bỏ qua Layout này sẽ sắp xếp các phần tử lần lượt theo chiều ngang hoặc dọc dựa vào theo thuộc tính android:orientation” ” thuộc tính này có 2 giá trị là vertical và horizontal , vertical là sắp xếp theo chiểu dọc, horizontal là sắp xếp theo chiều ngang ,
các thuộc tính android:layout_width và adroid:layout_height sẽ cài đặt chiều rộng và chiều cao cho layout và các component trên nó , 2 thuộc tính này có 3 giá trị chính là
wrap_content,fill_parent và match_parent, sự khác nhau giữa fill_parent và match_parent chỉ thực sự rõ ràng khi có một khung trên layout còn wrap_content với fill mà match thì rõ ràng hơn :
wrap_content fill_parent
ở đây có một thuộc tính đặc biệt của LinearLayout là weightSum Vậy weightSum là gì ? Chữ Sum đã nói lên tất cả , Sum là tổng vậy weightSum là tổng trọng lượng Ở LinearLayout khi ta biểu diễn các component theo chiều ngang hoặc dọc , nếu muốn set cho các component
đó theo các tỉ lệ (như trên là 30-70) thì ta sẽ sử dụng weightSum, một điều chú ý là khi ta dùng weightSum , tỉ lệ sẽ bị ngược lại Như với chương trình trên ở layout ta để tổng sum =
100 , khi ta đặt cho editText thuộc tính weight = 30 thì nó sẽ chiếm 70% của khung và ngược lại ( cái này em cũng chả biết tại sao) Và đấy là một số các thiết kế cơ bản của một layout và điển hình là layout trên
đây là phần code xử lí
Kết quả :
Trang 15Demo tạo menu
Tạo ví dụ một vài menu của một Android app
Đầu tiên tạo môt project tên DemoMenu, không cần thiết kế gì đặc biệt
Giả sử ta muốn tạo 2 menu là Setting và Infomation Vào res/menu/main.xml
file main.xml nà là file quản lí các menuItem của project , mọi menu muốn hoạt động thì phảiđược khai báo trong file này từ đây ta tạo 2 ItemMenu là setting và Infomation:
Trang 16Giờ thì tạo 2 activity cho 2 menu này Các activity này extends lớp Activity trong thư viện Android, sau đó override phương thức onCreate(Bundle), đây là phương thức giúp ta hiển thị
1 layout
Và tất nhiên , cứ khi tạo 1 activity xong thì việc đầu tiên phải làm là vào file
AndroidManifest.xml để khai báo Để ý phần tên của actyvity mà ta đặt
Trang 17Quay lại với MainActivity , override phương thức public boolean
onOptionsItemSelected(MenuItem item) , thường thì phương thức này sẽ có sẵn ở
MainActivity khi ta tạo project nhưng sẽ có một số bản SDK API thấp sẽ không có
Phương thức này nhận vào một MenuItem , từ đó ta sẽ dựa vào id của từng item trong menu
để gọi ra Activity tương ứng bằng lớp đối tượng Intent
khi khởi tạo đối tượng intent ta sẽ truyền vào tên activity mà ta đặt ở file Manifest lúc nãy , intent sẽ dựa vào đó để chuyển hướng sang activity tương ứng Câu lệnh setActivity(Intent intent) nhận vào một Intent , khởi tạo activity mà intent đó đang trỏ tới đồng thời đóng activity hiện tại
Giờ thì tạo layout cho các menu :
Trang 18infomationLayout settingLayout
Do nãy ta khai báo layout infomation ở file manifest là
android:theme="@android:style/Theme.Dialog" nên nó sẽ có hình hiển thị kiểu như trên.giờ quay lại với infoActivity và settingActivity , ta setContentView(int id) truyền vào id của layout là OK
Kết quả :
Game Trắc nghiệm đơn giản
Trang 19Game có giao diện đồ họa đơn giản , mô phỏng theo game ai là triệu phú, tính năng đơn giản hơn.
Để làm những game này cần tìm hiểu một số kiến thức như AlertDialog, SQLite DB Đầu tiên là về SQLite, đây là CSDL được tích hợp sẵn khi cài đặt java android, các câu lệnh truy vấn csdl không khác gì so với SQL Server thông thường , co điều SQLite không hỗ trợ một số tính năng như store proceduce các thao tác như thêm,xóa đều thông qua code java.Bắt đầu thực hiện chương trình , về phần giao diện thiết kế đều sử dụng những kiến thức thông thường ở các sample trước không có gì nói tới nhiều
Đầu tiên , xác định các đối tượng , ở đây sẽ có 2 đối tượng là câu hỏi và người chơi Vì game này có đặc thù là một câu hỏi chỉ có 4 câu trả lời và trong đó chỉ có 1 đáp án đúng, mỗi câu hỏi có độ khó khác nhau tương ứng với các mốc câu hỏi Từ đó ta sẽ tạo lớp câu hỏi có các thuộc tính như sau :
Tiếp theo đến lớp người chơi , người chơi ở đây không cần quá nhiều thông tin , thực chất lớpngười chơi ở đây chỉ dùng để lưu kết quả cao nhất đã đạt được , vì vậy ta sẽ cần các thuộc tính là tên và số điểm
Trang 20Bắt đầu vào ActivityMain, ta khai báo các biến, trong đó có biến truy cập csdl:
biến này giúp ta truy cập vào hệ thống csdl của android, từ đó tạo một csdl mới
Câu lệnh này giúp ta tạo một Database mới nếu chưa có hoặc truy cập một DB nếu đã có, tạmđặt tên là “whorich1” cho giống tên của project
sau khi có csdl ta tiếp tục tạo các bảng tương đương với các đối tượng đã tạo ở trên:
đã xong phần tạo bảng Giờ đưa dữ liệu vào :
Tạm thời là như vậy , câu lệnh execSQL sẽ thực thi một câu truy vấn csdl mà ta truyền vào,
từ đó các câu lệnh thêm , sửa , xóa đều sẽ được thực hiện
Giờ ta đã có dữ liệu , tạm như vậy đã , giờ ta sẽ thiết kế sang các phân nhỏ khác trước khi vàophần chính Đầu tiên là nút thoát Yêu cầu của nút thoát là khi ấn vào sẽ bật ra một Dialog hỏi xem có muốn thoát hay không , nếu ấn vào có thì sẽ thoát , không thì thôi ở đây muốn làm được như vậy ta phải tìm hiểu AlertDialog Ở AlertDialog ta sẽ tự tạo ra các nút và bắt các sự kiện cho nó đầu tiên khởi tạo một AlertDialog: