28 tháng 7, 2013

Lập trình Android: Bài 8

Bài hôm nay Long sẽ giới  thiệu các sự kiện cơ bản trong lập trình ứng dụng android
Trong các demo ví dụ bài tập của Long cho các bạn hôm trước
Long thường sử dụng sự kiện onClickListener() để lắng nge việc các bạn click vài button
rồi từ sự kiện đó các bạn sẽ làm (xử lý) tiếp các vấn đề khác
dựa vào onClickListener() thì các bạn cũng có thể hiển phần nào về sự kiện rồi nhỉ
Như các bạn biết trong một ứng dụng thì có rất nhiều sự kiện, nó được code và chờ người dùng làm một cái gì đó kích hoạt sự kiện,
cái này người ta gọi là sự kiển chủ động được kích hoạt bởi người sử dụng ứng dụng đó
ngoài ra còn có sự kiện bị động ví dụ như các bạn có 1 ứng dụng báo thức,  tới một thời gian nào đó mà các bạn đã hẹn thì nó tự kích hoạt play đoạn nhạc báo thức
hoặc cũng do một vài sự kiện khác nữa do chính chúng ta thiết lập (code) cho nó
Tuy nhiên trong bài tập hôm nay Long sẽ chỉ giới thiệu phần sự kiện chủ động (do người dùng kích hoạt) thôi

-----------------------------------------------------------------------------------------
Hầu hết các đối tượng  trong android Button, TextView, EditText, ImageView, .....( nhiều đối tượng khác nữa các bạn tự tìm hiểu) sẽ có chung các sự kiện sau đây
1) Sự kiện onClickListener():
Là sự kiện lắng nge một cái click lên đối tượng đó,
code ví dụ như sau:
Button nut2; ... //Khai báo biến
nut2.setOnClickListener(new OnClickListener() {  
   @Override
   public void onClick(View v) {
    Toast.makeText(MainActivity.this, "Bạn vừa click",Toast.LENGTH_SHORT).show();
   }
});
2) Sự kiện OnLongClickListener() là một sự kiện khi bạn nhấn và giữ đối tượng đó tầm 2s
Code ví dụ:
Button nut1; ....
nut1.setOnLongClickListener(new OnLongClickListener() {  
   @Override
   public boolean onLongClick(View arg0) {
    AlertDialog myAlertDialog = taoMotAlertDialog();
    myAlertDialog.show();
    return false;
   }
  });
3) Sự kiện OnFocusChangeListener() khi có một cái gì đó thay đổi, ví dụ như setText() mới, sự kiện này sẽ kích hoạt - đây là 1 sự kiện bị động
nut2.setOnFocusChangeListener(new OnFocusChangeListener() {  
   @Override
   public void onFocusChange(View arg0, boolean arg1) {
    //Làm cái gì hay xử lý code một vấn đề nào đó
   }
  });
4) Sự kiện OnTouchListener() là sự kiện chạm vào đối tượng lưu ý sự kiện này khác với OnClickListenner nhé
Lưu ý sự kiện này còn chia ra nhỏ trong nó như sau:
- MotionEvent.ACTION_DOWN: Lắng nghe khi bạn vừa nhấn xuống
- MotionEvent.ACTION_UP: Lắng nghe khi bạn vừa thả nút ra
- MotionEvent.ACTION_MOVE: Lắng nghe khi bạn vừa đè xuống vừa di chuyển
- Ngoài ra còn nhiều sự kiện con khác nữa các bạn tự tìm hiểu nhé, như là :
     + MotionEvent.ACTION_CANCEL ….
Code ví dụ:
nut3.setOnTouchListener(new OnTouchListener() {  
   @Override
   public boolean onTouch(View arg0, MotionEvent arg1) {
    if(arg1.getAction() == MotionEvent.ACTION_DOWN){
     text.setText("Bạn vừa nhấn xuống TextView này!");
    }else if(arg1.getAction() == MotionEvent.ACTION_UP){
     text.setText("Bạn vừa đưa ngón tay ra khỏi TextView này!");
    }else if(arg1.getAction() == MotionEvent.ACTION_MOVE){
     text.setText("Bỏ cái ngón tay ra, kéo kéo cái gì!");
    }
    return false;
   }
  });
-----------------------------------------------------------------------------
Lưu ý nhớ import đối tượng để sử dụng trong class:
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;
( (chuckle) mách nước bạn thủ thuật import nhanh: Đưa con trỏ chuột vào giữa OnTouchListener() trong đoạn code tạo đối tượng "new OnTouchListener()" và bấm Ctrl + 1 rồi click chọn dòng import vào thôi)
---------------------------------------------------------------------------------
Trên đây là sự kiện trong ứng dụng android, ngoài ra còn có các sự kiện khác khi các bạn tác động lên thiết bị thật hoặc máy ảo android
Việc này vô cùng đơn giản bạn chỉ kế thừa và định nghĩa lại (override) lại hàm onKeyDown(int keyCode, KeyEvent event) của Activity thôi
Các bạn đưa con trỏ chuột đến vị trí để chuẩn bị viết 1 hàm (function) mới là đang sử dụng Eclipse nhé, Click chuột phải chọn Source rồi chọn Override/Implement Method
trong phần implement của Activity tít chọn hàm onKeyDown() rồi ok
sau đó bạn định nghĩa lại
các nút vật lý trên thiết bị gồm có rất nhiều như nút Menu, Back, Volume+, Volume-, Home, Search, Nút A,B,C,D .... nói chung là rất nhiều nút vật lý khác (một số thiết bị android có bàn phím cứng).
Tuy nhiên riêng 2 nút Home và Search thì ra hiện tại khó có thể can thiệp được, muốn định nghĩa lại hoàn toàn 2 nút này chúng ta phải hiểu rõ các "cờ" cho phép của android, xử lý vấn đề này Long sẽ có 1 bài viết trên mục "Lập trình nâng cao android" các bạn chú ý theo dõi nhé!
Sau đây là đoạn code ví dụ cho cái này:
@Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  if ((keyCode == KeyEvent.KEYCODE_BACK)) {
   text.setText("Bạn vừa bấm nút Back!");
   return true;
  }else if ((keyCode == KeyEvent.KEYCODE_MENU)) {
   text.setText("Bạn vừa bấm nút MENU!");
   return true;
  }else if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP)) {
   text.setText("Bạn vừa bấm nút VOLUME+");
   return true;
  }else if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)) {
   text.setText("Bạn vừa bấm nút VOLUME-");
   return true;
  }
  return super.onKeyDown(keyCode, event);
 }
Sau đây là topic hướng dẫn làm một ứng dụng demo về các sự kiện
các bạn chú ý đọc hiểu rồi  làm theo nha, làm không được rồi hẳn tải project về xem!
http://android.vn/threads/24466

2 nhận xét:

  1. Bạn chỉ cho mình code can thiệp vào home button được ko, mình đang làm 1 app khóa màn hình.

    Trả lờiXóa
  2. Chia sẽ cùng nhau học lập trình Android đơn giản
    http://histudycode.com/android/tu-hoc-android-cho-nguoi-moi-bat-dau/

    Trả lờiXóa