본문 바로가기
dev/android

android custom dialog 만들기

by NCJ 2018. 12. 18.
728x90
반응형
SMALL


안드로이드 커스텀 다이얼로그 띄우기



안드로이드를 작업하다보면 다이얼로그 팝업으로 표현 할 때가 있다. 

그런 경우에 사용할 수 있는 커스텀 다이얼로그를 만들어 보도록 하자.




위 사진과 같은 다이얼을 한 번 띄어 보도록 하겠습니다. 

 

커스텀 다이얼로그 XML 코드입니다.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="8dp"
android:background="#fff"
android:orientation="vertical">


<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="8dp">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="8dp"
android:gravity="center"
android:text="커스텀 다이얼로그"
android:textColor="#000"
android:textSize="18dp" />

<EditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="이름을 입력해주세요." />

</LinearLayout>


<LinearLayout
android:layout_marginTop="8dp"
android:padding="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<Button
android:id="@+id/btn_ok"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:layout_weight="1"
android:background="#28568e"
android:text="확인"
android:textColor="#fff"
android:textSize="18dp" />

<Button
android:id="@+id/btn_cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:layout_weight="1"
android:background="#28568e"
android:text="취소"
android:textColor="#fff"
android:textSize="18dp" />


</LinearLayout>
</LinearLayout>


커스텀 다이얼로그를 만드셨다면 메인액티비에서 버튼을 만들어보록 하겠습니다. 




메인 레이아웃 XML 코드입니다


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<Button
android:id="@+id/btn_popup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="이름 입력 팝업"
android:gravity="center"
android:padding="25dp"
android:layout_gravity="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</LinearLayout>


다이얼로그 클래스 생성


public class CustomDialog extends Dialog implements View.OnClickListener {
Context mContext;
EditText m_et_Name;

public CustomDialog(@NonNull Context context) {
super(context);
mContext = context;
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
setContentView(R.layout.popup);
init();
}
private void init() {
m_et_Name = findViewById(R.id.et_name);
findViewById(R.id.btn_ok).setOnClickListener(this);
findViewById(R.id.btn_cancel).setOnClickListener(this);

}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_ok:
break;

case R.id.btn_cancel:
dismiss();
break;
}
}
}




다이얼로그 띄우는 코드 


CustomDialog dialog = new CustomDialog(MainActivity.this);
WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
params.copyFrom(dialog.getWindow().getAttributes());
params.width = (int) (getApplicationContext().getResources().getDisplayMetrics().widthPixels * 0.7f);
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
dialog.show();



메인액티비티 전체 소스



package com.example.ncj.callback;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


findViewById(R.id.btn_popup).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

CustomDialog dialog = new CustomDialog(MainActivity.this);
WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
params.copyFrom(dialog.getWindow().getAttributes());
params.width = (int) (getApplicationContext().getResources().getDisplayMetrics().widthPixels * 0.7f);
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
dialog.show();

}
});


}
}




실행결과




728x90
반응형
LIST