[#118][안드로이드] AlertDialog Custom하기 (TextView, EditText, Button disable)
[안드로이드] AlertDialog Custom하기 (TextView, EditText, Button disable)
**전 게시글에 이어서 AlertDialog에 TextView와 EditText Listener, Button 제어 부분 추가!
☞ (이전 게시글 보러가기)
final EditText et = new EditText(getContext());
final TextView tv = new TextView(getContext());
//EditText를 한 줄로 제한
et.setSingleLine(true);
//글꼴 적용
tv.setTypeface(typeface);
et.setTypeface(typeface);
//TextView에 Text setting
tv.setText("닉네임은 2~8글자만 등록할 수 있습니다.");
//EditText를 통해 입력받을 문자열 준비
value = "";
//여기부터 이전 게시물 참고
LinearLayout container = new LinearLayout(getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.leftMargin = getResources().getDimensionPixelSize(R.dimen.dialog_margin);
params.rightMargin = getResources().getDimensionPixelSize(R.dimen.dialog_margin);
tv.setLayoutParams(params);
et.setLayoutParams(params);
//여기까지 이전 게시물 참고
//EditText에 Listener 생성
et.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if(et.getText().length() >= 2 && et.getText().length() <= 8){
//입력값이 2글자~8글자 일 때만 확인 버튼 활성화
button.setEnabled(true);
}else{
//그 외의 경우는 확인 버튼 비활성화
button.setEnabled(false);
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
//여기부터 이전 게시물 참고
container.setOrientation(LinearLayout.VERTICAL);
container.addView(et);
container.addView(tv);
final AlertDialog.Builder alt_bld = new AlertDialog.Builder(getContext(),R.style.MyAlertDialogStyle);
alt_bld.setTitle("닉네임 변경").setMessage("변경할 닉네임을 입력하세요")
.setIcon(R.drawable.check_dialog_64).setCancelable(
false).setView(container).setPositiveButton("확인",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
value = et.getText().toString();
user_name.setText(value);
}
}).setNegativeButton("취소", null);
final AlertDialog alert = alt_bld.create();
//여기까지 이전 게시물 참고
//AlertDialog에 Listener생성
alert.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
button = alert.getButton(AlertDialog.BUTTON_POSITIVE);
if (button != null) {
//alert 생성시 EditText가 비어있으므로 disable로 설정
button.setEnabled(false);
}
}
});
alert.show();
| cs |
1. EditText에 addTextChangedListener 추가 : et.addTextChangedListener
2. AlertDialog의 버튼 찾아 제어하기 (able, disable) : button = alert.getButton(AlertDialog.BUTTON_POSITIVE);
=> button.setEnabled(true); button.setEnabled(false);
결과물 (EditText 글자 수에 따라 버튼 활성화, 비활성화)
댓글
댓글 쓰기