투케이2K

1052. (Android/Java) [간단 소스] AlertDialog 팝업창 생성 시 동적 Button 생성 및 ViewGroup 에 addView 추가 본문

Android

1052. (Android/Java) [간단 소스] AlertDialog 팝업창 생성 시 동적 Button 생성 및 ViewGroup 에 addView 추가

투케이2K 2026. 4. 8. 19:45
728x90
반응형

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Java / Kotlin

 

[소스 코드]

// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Java / Kotlin


- 개발 툴 : AndroidStudio


- 기술 구분 : Android / AlertDialog / ViewGroup / Button


- 사전) 👉 LayoutInflater 간략 설명 : 

  >> LayoutInflater 는 XML 레이아웃 파일을 메모리 상의 View 객체로 변환(인플레이트) 해주는 클래스입니다.

  >> LayoutInflater 사용 예시 : 

    LayoutInflater inflater = LayoutInflater.from(context);
    View view = inflater.inflate(R.layout.dialog_custom, null);


- 사전) 👉 ViewGroup 간략 설명 : 

  >> ViewGroup 은 다른 View 또는 ViewGroup을 담을 수 있는 컨테이너입니다.

  >> 새로운 컴포넌트를 뷰에 추가하기 위해서는 ViewGroup 만이 addView() 할 수 있습니다.


- 사전) 👉 LayoutInflater + ViewGroup 의 관계 (핵심)

  >> LayoutInflater 는 View 트리를 만들고

  >> ViewGroup 은 그 View 들을 담는 역할

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[설명 정리]
// --------------------------------------------------------------------------------------

--------------------------------------------------------------------
✅ LayoutInflater 사용해 팝업창에 표시 될 xml 파 레이아웃 지정 수행
--------------------------------------------------------------------
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View dialogView = inflater.inflate(R.layout.alert_wifi_info, null); // ✔️ [xml 지정] : WIFI SSID 와 PW 입력 EditText 포함

final EditText ssidEdit = (EditText) dialogView.findViewById(R.id.ssidEdit);
final EditText pwEdit = (EditText) dialogView.findViewById(R.id.pwEdit);



--------------------------------------------------------------------
✅ 동적 Button 생성 및 ViewGroup 사용해 addView 버튼 추가 실시
--------------------------------------------------------------------
// 버튼 생성
Button button = new Button(mContext);
button.setText("WIFI 정보 확인 버튼");


// ✔️ dialogView 의 root 레이아웃을 ViewGroup 로 캐스팅
ViewGroup rootView = (ViewGroup) dialogView;


// LayoutParams 설정 (LinearLayout 기준)
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT,
        LinearLayout.LayoutParams.WRAP_CONTENT
);


// 마진 설정
params.topMargin = 20;
params.leftMargin = 20;
params.rightMargin = 20;


// 버튼 클릭 이벤트 정의
button.setOnClickListener(v -> {
  S_Log.w("KWON_TWOK", "WIFI 정보 확인 버튼 클릭 이벤트 발생");

});


// ✔️ dialogView(최상위 레이아웃)에 바로 추가
rootView.addView(button);



--------------------------------------------------------------------
✅ AlertDialog 팝업창 생성 및 setView 에 xml 레이아웃 지정 수행
--------------------------------------------------------------------
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
    @Override
    public void run() {


        // [AlertDialog 팝업창 변수 생성]
        AlertDialog alertDialog;


        // [AlertDialog 팝업창 옵션 지정]
        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
        builder.setTitle(finalChangeTitle); //[팝업창 타이틀 지정]
        builder.setIcon(R.drawable.icon); //[팝업창 아이콘 지정]
        //builder.setMessage(ment); //[팝업창 내용 지정]
        builder.setCancelable(false); //[외부 레이아웃 클릭시도 팝업창이 사라지지않게 설정]

        builder.setView(dialogView); // ✔️ [뷰 지정]

        builder.setPositiveButton("확인", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // -----------------------------------------
                // TODO [버튼 클릭 이벤트 처리]
                // -----------------------------------------
            }
        });
        builder.setNeutralButton("추가 정보", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // -----------------------------------------
                // TODO [버튼 클릭 이벤트 처리]
                // -----------------------------------------
            }
        });
        builder.setNegativeButton("닫기", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // -----------------------------------------
                // TODO [버튼 클릭 이벤트 처리]
                // -----------------------------------------


                // -----------------------------------------
                // TODO [키보드 내림]
                // -----------------------------------------
                try {
                    InputMethodManager imm = (InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(ssidEdit.getWindowToken(), 0);
                    imm.hideSoftInputFromWindow(pwEdit.getWindowToken(), 0);
                }
                catch (Exception e){}
            }
        });


        // [AlertDialog 팝업창 생성 및 활성 표시]
        alertDialog = builder.create();
        alertDialog.show();

    }
}, 0);

// --------------------------------------------------------------------------------------





// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

▶️ [간단 소스] 안드로이드 휴대폰 번호 입력 팝업창 UI 유틸 파일 제작 - 커스텀 Alert 팝업창

https://kkh0977.tistory.com/7741

https://blog.naver.com/kkh0977/223768884974?trackingCode=blog_bloghome_searchlist


▶️ [android] 안드로이드 Alert 팝업창 확인 버튼 클릭 시 조건 체크 및 validation 검증 후 닫기 dismiss 완료 처리 로직

https://kkh0977.tistory.com/7177

https://blog.naver.com/kkh0977/223622208315?trackingCode=blog_bloghome_searchlist


▶️ [간단 소스] 안드로이드 Webview 웹뷰 window open 새창 열기 이벤트 발생 시 Alert 팝업창 표시 및 외부 링크 이동 수행

https://kkh0977.tistory.com/7641

https://blog.naver.com/kkh0977/223738922879?trackingCode=blog_bloghome_searchlist

// --------------------------------------------------------------------------------------
 
728x90
반응형
Comments