本文中初步讨论了关于原生Dialog实现方式,自定义Dialog样式实现以及注意细节
基于Android Studio API 23开发
- 原生Dialog三种样式实现方式
- 自定义Dialog实现方式
- 结束语
AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到构造器
builder.setTitle("提示"); //设置标题
builder.setMessage("是否确认退出?"); //设置内容
builder.setIcon(R.mipmap.ic_launcher);//设置图标,图片id即可
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { //设置确定按钮
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss(); //关闭dialog
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { //设置取消按钮
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setNeutralButton("忽略", new DialogInterface.OnClickListener() {//设置忽略按钮
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
//参数都设置完成了,创建并显示出来 (三个按钮本身是空作用的,需要人为赋值)
builder.create().show();
DialogInterface.OnClickListener dialogOnclicListener=new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
switch(which){
case Dialog.BUTTON_POSITIVE:
break;
case Dialog.BUTTON_NEGATIVE:
break;
case Dialog.BUTTON_NEUTRAL:
break;
}
}
};
//dialog参数设置
AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到构造器
builder.setTitle("提示"); //设置标题
builder.setMessage("是否确认退出?"); //设置内容
builder.setIcon(R.mipmap.ic_launcher);//设置图标,图片id即可
builder.setPositiveButton("确认",dialogOnclicListener);
builder.setNegativeButton("取消", dialogOnclicListener);
builder.setNeutralButton("忽略", dialogOnclicListener);
builder.create().show();
final String items[]={"路飞","娜美","索隆"};
//dialog参数设置
AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到构造器
builder.setTitle("提示"); //设置标题
//builder.setMessage("是否确认退出?"); //设置内容
builder.setIcon(R.mipmap.ic_launcher);//设置图标,图片id即可
//设置列表显示,注意设置了列表显示就不要设置builder.setMessage()了,否则列表不起作用。
builder.setItems(items,new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
//which属性是items数组的下标
}
});
builder.setPositiveButton("确定",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
final String items[]={"男","女"};
AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到构造器
builder.setTitle("提示"); //设置标题
builder.setIcon(R.mipmap.ic_launcher);//设置图标,图片id即可
builder.setSingleChoiceItems(items,0,new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//dialog.dismiss();
//setSingleChoiceItems参数中,0表示默认选中是第一个,如图所示是默认选中“男”。
}
});
builder.setPositiveButton("确定",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
final String items[]={"乔巴","山治","乌索普"};
final boolean selected[]={true,false,true};
AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到构造器
builder.setTitle("提示"); //设置标题
builder.setIcon(R.mipmap.ic_launcher);//设置图标,图片id即可
builder.setMultiChoiceItems(items,selected,new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// dialog.dismiss();
//which是点击的item下标,在这里可以保留下标的状态用于下次呈现
// android会自动根据你选择的改变selected数组的值。
}
});
builder.setPositiveButton("确定",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
public class CouponDialog extends Dialog {
private Context context;
@SuppressLint("InflateParams")
public CouponDialog (final Context context){
super(context, R.style.DialogStyle);
this.context=context;
View view = LayoutInflater.from(context).inflate(R.layout.layout_cash_coupon_dialog, null);//设置相关布局
setContentView(view);
// 设置窗口大小
Window mWindow = getWindow();
WindowManager.LayoutParams lp = mWindow.getAttributes();
if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {// 竖屏
//这里必须设置相关的高度和宽度,如果不设置将不会显示出来
lp.width = getScreenWidth(context);
lp.height = getScreenHeight(context)/2;
} else {
lp.width = getScreenHeight(context);
}
mWindow.setAttributes(lp);
// 设置可以动画
mWindow.setWindowAnimations(R.style.dialogAnimBottomAndFade);
// 位置设置在底部--显示位置(Gravity.CENTER)中间
mWindow.setGravity(Gravity.BOTTOM);
// 设置可取消
setCancelable(true);
setCanceledOnTouchOutside(true);
}
public static int getScreenWidth(Context context){
DisplayMetrics dm = new DisplayMetrics();
((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(dm);
return dm.widthPixels;
}
public static int getScreenHeight(Context context){
DisplayMetrics dm = new DisplayMetrics();
((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(dm);
return dm.heightPixels;
}
//如果想做相关点击事件在初始化中进行对象以及数据的初始化
}
styles里的自定义Dialog配置
anim中创建dialog_show和dialog_dismiss
dialog_show
"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android">
"100%p"
android:duration="500" />
dialog_dismiss
"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android">
"100%p"
android:duration="500" />
对于原生Dialog的样式无法进行重绘,并且根据Android Studio中使用的API不同,很可能会发生样式的变化。结合多方面因素考虑还是需要自定义一个Dialog界面用于复写比较好,不但可以保持页面的整洁性,还可以保证页面的统一性。