2016년 1월 20일 수요일

안드로이드 EditText 이벤트 처리



안드로이드 개발 팁




안드로이드 EditText 이벤트 처리 정보


Android에서는 EditText 에서 입력 이벤트 처리를 해 주어야 할 경우가 있어요

키보드에서 입력하는 동안의 이벤트와 그리고 enter키가 눌렸을 때의 이벤트 처리 등 해줘야 할 부분이 있어요
EditText 에 있는 OnEditorActionListener 와 OnKeyListener 를 이용해서 하게 되면 Enter와 back 키와 같은 이벤트를 처리 할 수 있어요 

OnEditorActionListener와 OnKeyListener 의 결과가 비슷하기 때문에 OnEditorActionListener를 이용한 예제 코드를 보세요 

  1. package com.example.coding;   
  2.   
  3. import android.app.Activity;   
  4. import android.os.Bundle;   
  5. import android.util.Log;   
  6. import android.view.KeyEvent;   
  7. import android.widget.EditText;   
  8. import android.widget.TextView;   
  9. import android.widget.TextView.OnEditorActionListener;   
  10.   
  11. public class EditTextEvent extends Activity implements OnEditorActionListener{   
  12.        
  13.     EditText editInput = null;   
  14.     TextView textResult = null;   
  15.     
  16.     @Override  
  17.     public void onCreate(Bundle savedInstanceState) {   
  18.         super.onCreate(savedInstanceState);   
  19.         setContentView(R.layout.main);   
  20.            
  21.         editInput = (EditText)findViewById(R.id.EditText_example);   
  22.         editInput.setOnEditorActionListener(this);   
  23.     }   
  24.   
  25.     @Override  
  26.     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {   
  27.         switch(v.getId())   
  28.         {   
  29.         case R.id.EditText_Input:   
  30.         {   
  31.             if(event.getAction() == KeyEvent.ACTION_DOWN)   
  32.             {   
  33.                 Log.i("테스트""테스트");   
  34.             }   
  35.             break;   
  36.         }   
  37.         }   
  38.         return false;   
  39.     }   
  40. }  

위 처럼 구현하시면 돼요
하지만 고려할 사항이 있어요
소프트 키보드에서 입력한 순간 순간마다의 이벤트는 받지 못해요. OnKeyListener를 이용하여도 마찬가지 로 이벤트를 받지 못해요
이럴 경우에는 addTextChangedListener 라는 것을 이용하세요. 
이것에 대한 예제  다음을 참고하세요~ 

  1. package com.example.coding;   
  2.   
  3. import android.app.Activity;   
  4. import android.os.Bundle;   
  5. import android.text.Editable;   
  6. import android.text.TextWatcher;   
  7. import android.util.Log;   
  8. import android.view.KeyEvent;   
  9. import android.widget.EditText;   
  10. import android.widget.TextView;   
  11. import android.widget.TextView.OnEditorActionListener;   
  12.   
  13. public class EditTextEvent extends Activity implements OnEditorActionListener{   
  14.        
  15.     EditText editInput = null;   
  16.     TextView textResult = null;   
  17.        
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState) {   
  20.         super.onCreate(savedInstanceState);   
  21.         setContentView(R.layout.main);   
  22.            
  23.         editInput = (EditText)findViewById(R.id.EditText_example);   
  24.         editInput.setOnEditorActionListener(this);   
  25.         editInput.addTextChangedListener(textWatcherInput);   
  26.     }   
  27.   
  28.     @Override  
  29.     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {   
  30.         switch(v.getId())   
  31.         {   
  32.             case R.id.EditText_Input:   
  33.             {   
  34.                 if(event.getAction() == KeyEvent.ACTION_DOWN)   
  35.                 {   
  36.                     Log.i("테스트""테스트");   
  37.                 }   
  38.                 break;
  39.             }
  40.         }
  41.         return false;   
  42.     }
  43.     
  44.     TextWatcher textWatcherInput = new TextWatcher() {   
  45.            
  46.         @Override  
  47.         public void onTextChanged(CharSequence s, int start, int before, int count) {   
  48.             Log.i("onTextChanged", s.toString());               
  49.         }   
  50.            
  51.         @Override  
  52.         public void beforeTextChanged(CharSequence s, int start, int count,   
  53.                 int after) {   
  54.             Log.i("beforeTextChanged", s.toString());           
  55.         }   
  56.            
  57.         @Override  
  58.         public void afterTextChanged(Editable s) {   
  59.             Log.i("afterTextChanged", s.toString());    
  60.         }   
  61.     };     
  62. }  
TextWatcher안에 있는 onTextChanged는 변경된 텍스트에 대한 결과를 beforeTextChanged는 변경되기 전에 입력 되었던 텍스트에 대한 내용을 afterTextChanged는 텍스트가 변경이 되었을 때의 결과를 보여줘요
개발자분들에게 도움이 되시길 바라며
즐거운 시간 보내세요~



댓글 없음:

댓글 쓰기