自定义Dialog
实现步骤:
创建一个类实现Dialog,在里边对自己的对话框进行设置布局和监听
public class My_Dialog extends Dialog {
//控件
ImageView img;
TextView text;
Button but1,but2;
//数据
int pic;
String mes;
String bt1,bt2;
//接口
OK ok;
NO no;
public void setNo(NO no) {
this.no = no;
}
public void setOk(OK ok) {
this.ok = ok;
}
public My_Dialog(Context context) {
super(context);
}
public My_Dialog( Context context, int themeResId) {
super(context, themeResId);
}
protected My_Dialog(Context context, boolean cancelable, DialogInterface.OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
}
public void setPic(int pic) {
this.pic = pic;
}
public void setMes(String mes) {
this.mes = mes;
}
public void setBt1(String bt1) {
this.bt1 = bt1;
}
public void setBt2(String bt2) {
this.bt2 = bt2;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加载布局
setContentView(R.layout.layout);
//设置内容 初始化控件
img = findViewById(R.id.img);
text = findViewById(R.id.text);
but1 = findViewById(R.id.bt1);
but2 = findViewById(R.id.bt2);
//为控件加载内容
img.setImageResource(pic);
text.setText(mes);
but1.setText(bt1);
but2.setText(bt2);
but1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ok.OK();
}
});
but2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
no.NO();
}
});
}
}
监听要用到接口回调,这里我们需要根据自己所需要使用的方法创建接口
在我们主Activity里需要点击事件弹出对话框
public class MainActivity extends AppCompatActivity {
Button button1;
Button button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = findViewById(R.id.bt_dialog);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final My_Dialog my_dialog = new My_Dialog(MainActivity.this);
my_dialog.setBt1("OK");
my_dialog.setBt2("NO");
my_dialog.setMes("陈珏琪");
my_dialog.setPic(R.mipmap.cjq);
my_dialog.setOk(new OK() {
@Override
public void OK() {
Toast.makeText(MainActivity.this, "你点击了OK", Toast.LENGTH_SHORT).show();
my_dialog.dismiss();
}
});
my_dialog.setNo(new NO() {
@Override
public void NO() {
Toast.makeText(MainActivity.this, "你点击了NO", Toast.LENGTH_SHORT).show();
my_dialog.dismiss();
}
});
my_dialog.show();
}
});
}
}
自定义PopuoWindow
和我们自定义的Dialog类型需要自己创建类继承PopuoWindow
public class My_PopupWindow extends PopupWindow {
public My_PopupWindow(Context context) {
super(context);
//加载布局
View view = LayoutInflater.from(context).inflate(R.layout.layout, null);
//设置宽高
setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
//设置布局
setContentView(view);
}
}
需要在主类里边创建出来
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.bt_window);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
My_PopupWindow my_popupWindow = new My_PopupWindow(MainActivity.this);
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_main, null);
my_popupWindow.setOutsideTouchable(true);
my_popupWindow.showAtLocation(view, Gravity.TOP,0,0);
}
});
}
}