Notice
Recent Posts
Recent Comments
Link
투케이2K
1052. (Android/Java) [간단 소스] AlertDialog 팝업창 생성 시 동적 Button 생성 및 ViewGroup 에 addView 추가 본문
Android
1052. (Android/Java) [간단 소스] AlertDialog 팝업창 생성 시 동적 Button 생성 및 ViewGroup 에 addView 추가
투케이2K 2026. 4. 8. 19:45728x90
반응형
[개발 환경 설정]
개발 툴 : 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
반응형
'Android' 카테고리의 다른 글
Comments
