Bài giảng Lập trình di động - Bài 3: Các layout và một số loại widget thường dùng
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình di động - Bài 3: Các layout và một số loại widget thường dùng", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_lap_trinh_di_dong_bai_3_cac_layout_va_mot_so_loai.pdf
Nội dung text: Bài giảng Lập trình di động - Bài 3: Các layout và một số loại widget thường dùng
- LẬP TRÌNH DI ĐỘNG Bài 3: các layout và một số loại widget thường dùng
- Nhắc lại bài trước ▪Giao diện phát triển ứng dụng của Android Studio ▪Các thành phần của một project android ▪File mô tả ứng dụng AndroidManifest.xml ▪Bốn loại thành phần của ứng dụng android: activity, service, provider, receiver ▪Khái niệm activity, cách tạo giao diện của activity bằng code và bằng xml ▪Mã minh họa việc gọi một activity khác ▪Vòng đời của activity: create -> start -> resume -> pause -> stop -> destroy 2
- Nội dung 1. Khái niệm view & view group 2. Làm việc với layout 3. Một số layout thông dụng 4. Tương tác với các điều khiển 5. Một số điều khiển đơn giản 3
- Phần 1 Khái niệm view & view group 4
- View - Widget ▪View là đối tượng cơ bản để xây dựng mọi thành phần của giao diện đồ họa ▪Hầu hết các thành phần cơ bản của giao diện đều kế thừa từ View: TextView, Button, Spinner, ToggleButton, RadioButton, ▪Các thành phần này hầu hết đều nằm trong gói android.widget nên thường gọi là widget ▪Custom view: lập trình viên có thể tự tạo widget của riêng mình bằng cách tùy biến view để hoạt động theo cách của riêng mình 5
- ViewGroup - Layout ▪ViewGroup là các view đặc biệt, có thể chứa bên trong nó các view khác ▪ VD1: thông tin về ngày tháng gồm một số text ▪ VD2: danh sách các ngày trong tháng gồm các button ▪ViewGroup là cửa sổ cha của các view con ▪Một view nằm trong ViewGroup cần phải có thông tin về vị trí của nó trong cửa sổ cha ▪ViewGroup = các view con + cách bố trí các view con đó bên trong ▪ViewGroup lồng nhau quá sâu làm chậm ứng dụng 6
- Các khái niệm cơ bản ▪View – Widget ▪ViewGroup – Layout ▪Tham khảo thiết kế của app: ▪ Dùng công cụ Monitor của SDK ▪ Dùng Layout Inspector 7
- Công cụ Monitor (SDK) 8
- Layout Inspector (Tools\Android) 9
- Phần 2 Làm việc với layout 10
- Layout ▪Layout là ViewGroup đặc biệt ▪ Gồm các view con bên trong nó ▪ Quy cách bố cục các view con nhất quán ▪ Mỗi loại layout có quy tắc bố cục của riêng nó ▪Có thể tạo layout theo 2 cách: ▪ XML: soạn thông tin ở dạng XML, nạp layout từ XML bằng cách đọc từng dòng XML và tạo các thành phần phù hợp ▪ Code: tạo biến layout, tạo từng biến view, đặt view vào trong layout 11
- Layout by XML ▪Là phương pháp tạo giao diện phổ biến nhất ▪ XML có cấu trúc dễ hiểu, phân cấp, giống HTML ▪ Tên của thành phần XML tương ứng với lớp java trong code ▪Dễ chỉnh sửa trên bằng design hoặc sửa file XML ▪Tách rời giữa thiết kế và viết mã ▪Thực hiện: thiết kế file layout XML sau đó dùng bộ nạp LayoutInflater để tạo biến kiểu Layout LayoutInflater.from(context) .inflate(R.l ayout.filename, null); 12
- Layout by XML 13
- Layout by Code Button myButton = new Button(this); myButton.setText("Press me"); myButton.setBackgroundColor(Color.YELLOW); RelativeLayout myLayout = new RelativeLayout(this); RelativeLayout.LayoutParams buttonParams = new RelativeLayout.LayoutParams( RelativeLayout.Lay outParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); buttonParams.addRule(RelativeLayout.CENTER_HORIZONTAL); buttonParams.addRule(RelativeLayout.CENTER_VERTICAL); myLayout.addView(myButton, buttonParams); setContentView(myLayout); 14
- Layout Parameter ▪Quy định cách đặt để của view trong layout ▪Mỗi view cần đính kèm LayoutParams khi đặt vào trong Layout 15
- Tham số của layout và view ▪Bản thân layout và view cũng có các tham số của nó khi được đặt vào view cha ▪ Vị trí (position): cặp tọa độ Left/Top ▪ Kích thước (size): cặp giá trị Width/Height ▪ Lề (margin): tham số trong LayoutParams (kiểu MarginLayoutParams), quy định khoảng cách của view với các thành phần xung quanh ▪ Đệm (padding): vùng trống từ nội dung của view ra các viền, sử dụng phương thức setPadding(int,int,int,int) để điều chỉnh, đơn vị đo thường là dp 16
- Tham số của layout và view ▪Kích thước của view không bao gồm độ dày của margin ▪Trong android không có khái niệm border ▪Muốn một view có border, lập trình viên sử dụng thủ thuật thiết lập border thông qua background 17
- Phần 3 Một số layout thông dụng 18
- LinearLayout 19
- LinearLayout 20
- LinearLayout ▪Các view bên trong nó được xếp liên tiếp thành một hàng hoặc một cột ▪Thuộc tính android:orientation quy định cách bố cục theo hàng hay theo cột, giá trị có thể là: ▪ “vertical”: các view bên trong LinearLayout được sắp xếp theo chiều dọc ▪ “horizontal”: các view bên trong sắp xếp theo chiều ngang ▪LinearLayout không thay đổi kích thước các view con, chỉ điều chỉnh vị trí của chúng 21
- RelativeLayout ▪Là loại layout phổ biến nhất trong thiết kế giao diện ▪Các view con trong layout xác định vị trí và kích thước dựa trên quan hệ với view cha hoặc các view con khác ▪Dùng trong trường hợp đặt trọng tâm vào mối quan hệ giữa các thành phần ▪Ý tưởng của RelativeLayout được phát triển và nâng cấp thành ConstraintLayout, hiện là loại layout mặc định khi thiết kế giao diện 22
- RelativeLayout 23
- RelativeLayout 24
- RelativeLayout 25
- FrameLayout ▪Các view con được đặt liên tiếp chồng lên nhau, view sau đặt lên trên view trước ▪Layout không tự động đổi kích thước của view con ▪Có thể chuyển view con lên trên bằng code: parent.bringChildToFront(child); parent.invalidate(); 26
- ScrollView & HorizontalScrollView ▪ScrollView và HorizontalScrollView là trường hợp đặc biệt của FrameLayout ▪Cho phép view con có thể có kích thước lớn hơn view cha ▪Trong trường hợp view con nhỏ hơn view cha, người dùng chỉ nhìn và tương tác với view con ▪Trường hợp view con có kích thước lớn hơn view cha, ScrollView và HorizontalScrollView sẽ tự động xuất hiện các thanh cuộn phù hợp 27
- TableLayout ▪TableLayout dùng để tổ chức các đối tượng view dưới dạng một bảng gồm nhiều dòng và cột ▪Mỗi dòng nằm trong một thẻ ▪Mỗi đối tượng view đặt trên một dòng sẽ tạo thành một ô trong giao diện lưới do TableLayout tạo ra ▪Chiều rộng của mỗi cột được xác định bằng chiều rộng lớn nhất của các ô nằm trên cùng một cột ▪Kích thước của mỗi dòng cột không nhất thiết phải bằng nhau 28
- TableLayout 29
- TableLayout ▪Thông thường mỗi view sẽ chiếm một ô trên lưới ▪Trường hợp muốn để trống ô ta có thể đặt vào đó một textview trống (bằng thẻ ) ▪Tuy nhiên ta cũng có thể chỉ định kích thước và vị trí của view thông qua các thuộc tính ẩn: ▪ “android:layout_span”: cỡ của view (bao nhiêu cột) ▪ “android:layout_column”: vị trí cột đặt view 30
- Phần 4 Tương tác với các điều khiển 31
- Tương tác với các điều khiển ▪Để tương tác được với các điều khiển (view), cần làm 2 việc: 1. Tìm đúng điều khiển cần xử lý 2. Gọi các hàm phù hợp cho điều khiển đó (chặng hạn như thiết lập màu chữ, nội dung hiển thị, font chữ, các thuộc tính hoặc xác định cách xử lý sự kiện) ▪Tìm đúng điều khiển cần xử lý: ▪ Nếu có một biến lưu trữ điều khiển cần xử lý thì bỏ qua ▪ Nếu chưa có thì ta cần tìm điều khiển đó thông qua các hàm tìm kiếm của layout (thường là findViewById) 32
- Tương tác với các điều khiển ▪Khi nạp layout từ XML, mỗi view sẽ có một mã số của riêng nó (giống như CMT), mã số này là một hằng số khai báo trong thuộc tính “android:id” ▪Hàm “view findViewById(R.id.xyz)” cho phép tìm đối tượng có mã số là xyz, mã số này là một hằng số trong class con id thuộc class R ▪Sau khi tìm được view, ta chuyển kiểu view về control đúng của nó để xử lý ▪Chú ý quan trọng: mỗi lần nạp lại layout sẽ xóa toàn bộ các view cũ 33
- Tương tác với các điều khiển 34
- Phần 5 Một số điều khiển đơn giản 35
- TextView ▪Mục đích: hiển thị văn bản ▪Một số thuộc tính hay được sử dụng: ▪ android:layout_width ▪ android:layout_height ▪ android:text ▪ android:textColor ▪ android:textSize ▪ android:gravity 36
- EditText ▪Mục đích: hiển thị và cho phép nhập dữ liệu ▪Chú ý: ▪ Thuộc tính “android:singleLine” bằng false thì EditText sẽ là một Textbox, ngược lại nó là một TextField (cho phép nhập liệu nhiều dòng) ▪ Lấy nội dung: editText.getText().toString() 37
- Button & ImageButton ▪Mục đích: nhận lệnh bấm từ người dùng ▪Thuộc tính “android:onClick” chỉ ra phương thức sẽ khởi chạy khi nút được bấm ▪ImageButton sử dụng hình ảnh thay vì text 38
- ToggleButton ▪Mục đích: hiển thị trạng thái on/off ▪Thuộc tính quan trọng ▪ “android:textOn”: text hiện ở trạng thái on ▪ “android:textOff”: text hiện ở trạng thái off ▪ “android:onClick”: tương tự như ở Button ▪Phương thức “bool isChecked()” trả về trạng thái on/off ▪Từ phiên bản 4.0, android có điều khiển Switch tương tự như ToggleButton nhưng khác về cách hiển thị thông tin 39
- ToggleButton 39
- ToggleButton 39
- ToggleButton 39
- Switch ▪giống như ToggleButton 39
- Switch 39
- Switch 39
- CheckBox ▪Mục đích: đưa ra một ô check để người dùng có thể xác nhận có lựa chọn hay không ▪Thuộc tính quan trọng ▪ “android:checked”: thiết lập trạng thái ban đầu ▪ “android:text”: nội dung đi kèm với check box ▪ “android:onClick”: tương tự như ở Button ▪Phương thức “bool isChecked()” trả về trạng thái on/off ▪Phương thức “void setChecked(bool)” để thiết lập trạng thái on/off 40
- CheckBox 40
- CheckBox 40
- CheckBox 40
- RadioGroup & RadioButton 41
- RadioGroup & RadioButton ▪RadioGroup kế thừa từ LinearLayout (mặc định là căn theo cột – vertical) ▪RadioButton là các view cho phép lựa chọn on/off (dùng “bool isChecked()” để kiểm tra) ▪RadioGroup đảm bảo chỉ tối đa một RadioButton được chọn vào một thời điểm ▪Từ RadioGroup để lấy ID của RadioButton đang bật, dùng hàm “int getCheckedRadioButtonId()” (nếu không có RadioButton nào được lựa chọn thì hàm trả về -1) 42
- RadioGroup & RadioButton 41
- RadioGroup & RadioButton 41
- RadioGroup & RadioButton 41
- RadioGroup & RadioButton 41
- RadioGroup & RadioButton 41