TextWatcher Class는 에디트텍스트와 관련된 콜백 인터페이스이다.
즉, 사용자입력창(에디트텍스트)에 입력 발생 시
이를 제어할 수 있는 메서드가 정의되어있다.
사용자가 값을 입력할 때마다 어떠한 처리를 해주고 싶다면 TextWatcher를 활용하자.
아래는 값 입력시 버튼이 하나씩 활성화 되는 예시코드이다.
TestTextWatcherActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | public class TestTextWatcherActivity extends Activity { // 0. 초기화 private static final int EMAIL = 0 ; private static final int NAME = 1 ; private static final int PHONE = 2 ; private static final int CONFIRM = 3 ; private EditText[] etTexts; private Button[] btButtons; // 1. setLayout()메서드 : 각 요소들을 리스트에 저장 public void setLayout() { etTexts = new EditText[] { (EditText) findViewById(R.id.et_box_01), (EditText) findViewById(R.id.et_box_02), (EditText) findViewById(R.id.et_box_03) }; btButtons = new Button[] { (Button) findViewById(R.id.bt_check_01), (Button) findViewById(R.id.bt_check_02), (Button) findViewById(R.id.bt_check_03), (Button) findViewById(R.id.bt_confirm) }; } // 2. onCreate() @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); // Layout설정 setLayout(); // 각 EditText요소에 addTextChangedListner()를 이용하여 정의한 TextWatcher지정 etTexts[EMAIL].addTextChangedListener(emailWatcher); etTexts[NAME].addTextChangedListener(nameWatcher); etTexts[PHONE].addTextChangedListener(phoneWatcher); // 버튼 초기화(Disable) for (Button b : btButtons) { b.setEnabled( false ); } } // 3. 각 TextWatcher 정의 private TextWatcher emailWatcher = new TextWatcher() { // Text변경 시 CallBack @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length() > 0 ) { btButtons[EMAIL].setEnabled( true ); } else { btButtons[EMAIL].setEnabled( false ); } setEnable(setButtonEnable(etTexts[EMAIL], etTexts[NAME], etTexts[PHONE])); } // Text변경 전 CallBack @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } // Text변경 후 CallBack @Override public void afterTextChanged(Editable s) { } }; private TextWatcher nameWatcher = new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length() > 0 ) { btButtons[NAME].setEnabled( true ); } else { btButtons[NAME].setEnabled( false ); } setEnable(setButtonEnable(etTexts[EMAIL], etTexts[NAME], etTexts[PHONE])); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }; private TextWatcher phoneWatcher = new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length() > 0 ) { btButtons[PHONE].setEnabled( true ); } else { btButtons[PHONE].setEnabled( false ); } setEnable(setButtonEnable(etTexts[EMAIL], etTexts[NAME], etTexts[PHONE])); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }; // 4. 각 버튼 Enable메서드 정의 private void setEnable( boolean isEnable) { btButtons[CONFIRM].setEnabled(isEnable); } // 5. Confirm버튼 Enable메서드 정의 private boolean setButtonEnable(EditText email, EditText name, EditText phone) { boolean isAllFull = false ; if (email != null && name.length() > 0 && name != null && name.length() > 0 && phone != null && phone.length() > 0 ) { isAllFull = true ; } return isAllFull; } // 6. 각 버튼 이벤트 처리기 public void onButtonClick(View v) { switch (v.getId()) { case R.id.et_box_01: break ; case R.id.et_box_02: break ; case R.id.et_box_03: break ; case R.id.bt_confirm: if (btButtons[CONFIRM].isEnabled()) { Toast.makeText( getApplicationContext(), "EMAIL = " + etTexts[EMAIL].getText().toString() + " 등록 되었습니다. , " + "NAME = " + etTexts[NAME].getText().toString() + " 등록 되었습니다. , " + "PHONE = " + etTexts[PHONE].getText().toString() + " 등록 되었습니다." , Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getApplicationContext(), "모두 입력해 주십시오." , Toast.LENGTH_SHORT).show(); } break ; } } } |
'Android > Develop' 카테고리의 다른 글
[Android-Develop] 액티비티(Activity) 구성 (0) | 2015.01.05 |
---|---|
[Android-Develop] 인플레이션(Inflation) (0) | 2015.01.05 |
[Android-Develop] 위젯 - 에디트텍스트(EditText) (0) | 2015.01.01 |
[Android-Develop] 위젯 - 버튼(Button) (0) | 2015.01.01 |
[Android-Develop] 위젯 - 텍스트 뷰(Text View) (0) | 2015.01.01 |