[#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 글자 수에 따라 버튼 활성화, 비활성화)

댓글

가장 많이 본 글