Đây là trang lưu trữ các bài viết cũ
Xin vui lòng truy cập địa chỉ mới:
Bạn là Người An Phú?
Viết tiếp một ứng dụng BlackBerry có các thành phần giao diện nâng cao. Khi nhập đầy đủ username và password thì hiện ra một Album hình ành
Trong bài viết trước, chúng ta đã tạo một ứng dụng BlackBerry đơn giản có hình ảnh, button, menu...
Hôm nay, chúng ta sẽ viết một ứng dụng có tính năng đa dạng hơn.
Sử dụng công cụ refactor của Eclipse để đổi tên class
Chúng ta có 2 class chính: UiApp và UiScreen
public UiApp() { // Push a screen onto the UI stack for rendering. pushScreen(new UiScreen()); }
Trong class UiScreen, ta lần lượt xây dựng các thành phần sau:
public final class UiScreen extends MainScreen {
- Phần nhập username, password
- Phần lựa chọn domain (Home hay Work)
- Button Clear và Login
- Command quản lý sự kiện cho 2 button trên (loginHandler và clearHandler)
Hàm xây dựng của UiScreen:
public UiScreen() {
// add a logo Bitmap logo = Bitmap.getBitmapResource("iconvn.png"); BitmapField bmpField = new BitmapField(logo, Field.FIELD_HCENTER); add(bmpField);
// -------------- add(new SeparatorField());
// user name & password username = new EditField("Username: ", ""); password = new PasswordEditField("Password: ", ""); add(username); add(password);
// domain domain = new ObjectChoiceField("Domain: ",new String[]{"Home","Work"} ); add(domain);
// Remember pass CheckboxField chkRemember = new CheckboxField("Remember password", true); add(chkRemember);
// -------------- add(new SeparatorField());
// Button detail btnClear = new ButtonField("Clear", ButtonField.CONSUME_CLICK); btnLogin = new ButtonField("Login", ButtonField.CONSUME_CLICK );
Ở đây, ta muốn canh đều 2 button và cho chúng nằm sang bên phải màn hình nên phải dùng thêm HorizontalFieldManager để chứa chúng. Các thành phần phía trên ta không sử dụng HorizontalFieldManager hoặc VerticalFieldManager vì mặc định, luôn có một class VerticalFieldManager quản lý các thành phần.
// button position HorizontalFieldManager buttonManager = new HorizontalFieldManager(Field.FIELD_RIGHT); add(buttonManager); buttonManager.add(btnClear); buttonManager.add(btnLogin);
- Clear: Xóa dữ liệu nhập trên 2 trường username va password
- Login: hiện ra một album hình ảnh (sẽ viết class Album đó sau)
// event clear btnClear.setCommand(new Command(clearHandler)); btnLogin.setCommand(new Command(loginHandler));
Định nghĩa các method:
public void clearText() { username.setText(""); password.setText(""); }
public void login() {
if (username.getTextLength() == 0 || password.getTextLength() == 0) { Dialog.alert("You must enter a username and password"); } else { UiApp.getUiApplication().pushScreen(new Album()); } }
protected void makeMenu(Menu menu, int instance) {
super.makeMenu(menu, instance); MenuItem loginMenu = new MenuItem(new StringProvider("Login"), 20, 10); loginMenu.setCommand(new Command(loginHandler)); menu.add(loginMenu); MenuItem clearMenu = new MenuItem(new StringProvider("Clear"), 20, 10); clearMenu.setCommand(new Command(clearHandler)); menu.add(clearMenu); }
class LoginCommandHandler extends CommandHandler{ public void execute(ReadOnlyCommandMetadata metedata, Object context){ login(); } } class ClearCommandHandler extends CommandHandler{ public void execute(ReadOnlyCommandMetadata metedata, Object context){ clearText(); } }
}// kết thúc class UiScreen
Như vậy ta đã tạo xong các thành phần giao diện chính và các control sự kiện.
Ta giả định Album này chỉ hiện ra 3 hình ảnh
download và improt các hình này vào thư mục res
public class Album extends MainScreen {
private int displayWidth = Display.getWidth();private int displayHeight = Display.getHeight();
public Album() {
Hình ảnh chứa theo kiểu array, gồm 3 thuộc tính là
Bitmap[] images = new Bitmap[3]; String[] labels = new String[3]; String[] tooltips = new String[3];
ScrollEntry[] entries = new ScrollEntry[3];
for (int i = 0; i < entries.length; i++) { int imgIndex = i+1; images[i] = resizeImage(Bitmap.getBitmapResource("pic" + imgIndex + ".png")); labels[i] = "Label for image " + imgIndex; tooltips[i] = "Tooltip for image " + imgIndex; entries[i] = new ScrollEntry(images[i], labels[i],tooltips[i]); }
// final step - add entries to picturecroll add(new PictureScroll(entries));
private class PictureScroll extends PictureScrollField {
Hàm chỉnh kích thước hình ảnh: ở đây tùy theo màn hình điện thoại mà ta tùy chọn kích cở ảnh (1/2 chiều rộng/chiều cao)
private Bitmap resizeImage(Bitmap bm) {
Bitmap resizeBm = new Bitmap(displayWidth/2,displayHeight/2); bm.scaleInto(resizeBm,Bitmap.FILTER_BILINEAR); return resizeBm; }
Từ bài viết này, tất cả source code sẽ được đưa lên GitHub.com tại:
https://github.com/nguoianphu/lap-trinh-black-berry
Cách cài đặt và sử dụng GIT tương tự như Subversion, xem hướng dẫn tại:
http://blog.assembla.com/assemblablog/tabid/12618/bid/77264/Setting-Up-Git-on-Windows-in-Four-Easy-Steps.aspx