一.普通对话框
直接上代码
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化组件 bu_normal=findViewById(R.id.bu_normal_button); //绑定点击事件 bu_complex=findViewById(R.id.bu_complex_dialog); bu_my=findViewById(R.id.bu_my_dialog); bu_normal.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder= new AlertDialog.Builder(MainActivity.this); //设置标题 builder.setTitle("标题"); //设置展示信息 builder.setMessage("内容信息"); builder.setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "确定按钮",Toast.LENGTH_SHORT).show(); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "取消按钮",Toast.LENGTH_SHORT).show(); } }); //展示提示框 builder.create().show(); } });
效果如下:
二、复杂对话框
代码:
bu_complex.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final AlertDialog.Builder builder= new AlertDialog.Builder(MainActivity.this); builder.setTitle("复杂对话框"); builder.setIcon(R.drawable.ic_launcher_background); builder.setMessage("你喜欢我们的课程吗?"); builder.setPositiveButton("喜欢", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which ) { Toast.makeText(MainActivity.this, "那是相当的喜欢",Toast.LENGTH_SHORT).show(); } }); builder.setNegativeButton("一般般", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "还行",Toast.LENGTH_SHORT).show(); } }); builder.setNeutralButton("不喜欢", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "才怪",Toast.LENGTH_SHORT).show(); } }); builder.show(); } });
效果:
三.自定义对话框
首先需要在layout中设置好页面布局
<?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="match_parent" android:orientation="vertical" android:gravity="center"> <LinearLayout android:layout_width="300dp" android:layout_height="wrap_content" android:background="@drawable/custom_dialog_title" android:orientation="horizontal" android:gravity="center" android:paddingTop="10dp" android:paddingBottom="10dp"> <ImageView android:id="@+id/iv_icon" android:layout_width="30dp" android:layout_height="30dp" android:src="@drawable/tip"/> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="标题" android:textSize="20sp" android:layout_marginLeft="10dp"/> </LinearLayout> <View android:layout_width="300dp" android:layout_height="2dp" android:background="#9b9b9b"/> <LinearLayout android:layout_width="300dp" android:layout_height="wrap_content" android:background="@drawable/custom_dialog_content"> <TextView android:id="@+id/tv_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20sp" android:text="内容展示区" android:layout_margin="15dp" android:gravity="center"/> </LinearLayout> <View android:layout_width="300dp" android:layout_height="2dp" android:background="#9b9b9b"/> <LinearLayout android:layout_width="300dp" android:layout_height="wrap_content" android:background="@drawable/custom_dialog_button" android:orientation="horizontal"> <Button android:id="@+id/bu_positive" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/custom_dialog_positive" android:text="确定" android:textSize="20sp" android:layout_margin="10dp" android:textAllCaps="false"/> <Button android:id="@+id/bu_negative" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/custom_dialog_negative" android:text="取消" android:textSize="20sp" android:layout_margin="10dp"/> </LinearLayout> </LinearLayout>
Java代码:
public class DialogUtil { private static AlertDialog dialog; /** * * @param activity 上下文对象 * @param icon 标题对象 * @param title 标题展示内容 * @param content 主内容区 * @param positiveText 确定按钮 * @param negativeText 取消按钮 * @param clickListener 按钮点击事件处理接口 */ public static void showMyAlertDialog(Activity activity, int icon, String title, String content, String positiveText, String negativeText, final AlertDialogBtnClickListener clickListener){ //创建自定义页面对象view View view= LayoutInflater.from(activity).inflate( R.layout.custom_dialog_layout,null); //获取自定义页面组件 ImageView iv_icon = view.findViewById(R.id.iv_icon); TextView tv_title= view.findViewById(R.id.tv_title); TextView tv_content=view.findViewById(R.id.tv_content); Button bu_positive=view.findViewById(R.id.bu_positive); Button bu_negative=view.findViewById(R.id.bu_negative); //设定组件展示内容,相应事件 iv_icon.setImageResource(icon); tv_title.setText(title); tv_content.setText(content); bu_positive.setText(positiveText); bu_negative.setText(negativeText); bu_positive.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { clickListener.clickPositive(); dialog.dismiss(); } }); bu_negative.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { clickListener.clickNegative(); dialog.dismiss(); } }); //实例化dialog AlertDialog.Builder builder=new AlertDialog.Builder(activity); //设定提示框展示页面 builder.setView(view); //设定不能在外界取消 builder.setCancelable(false); dialog=builder.create(); //去掉背景多余内容 dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); //dialog展示 dialog.show(); } public interface AlertDialogBtnClickListener{ void clickPositive(); void clickNegative(); } /** * 创建自定义提示框 * @param context 上下文对象 * @param msg 页面提示信息 * @return */ public static Dialog createLoadingDialog(Context context, String msg){ //获取自定义提示框view对象 View view=LayoutInflater.from(context) .inflate(R.layout.custom_loading_dialog,null); ImageView img=view.findViewById(R.id.iv_img); TextView tip=view.findViewById(R.id.tv_tip); tip.setText(msg); //图片加载动画效果 Animation animation= AnimationUtils.loadAnimation(context,R.anim.loading_animation); img.startAnimation(animation); //创建提示框并设定样式 Dialog dialog=new Dialog(context,R.style.loading_dialog); //绑定自定义页面 dialog.setContentView(view); return dialog; } }
MainActivity.java
bu_my.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DialogUtil.showMyAlertDialog(MainActivity.this, R.drawable.tip, "my title", "确定退出吗?", "sure", "cancel", new DialogUtil.AlertDialogBtnClickListener() { @Override public void clickPositive() { finish(); } @Override public void clickNegative() { Toast.makeText(MainActivity.this, "误操作",Toast.LENGTH_SHORT).show(); } } );
效果: