AndroidStudio中实现AlertDialog对话框与自定义对话框制作

 

              ————安德风

 

 

一、最终效果演示:

android studio怎么弹出对话框 android studio对话框怎么样写_android

 

 

二、布局设计

①activity_main.xml源代码

 

1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 xmlns:app="http://schemas.android.com/apk/res-auto"
 4 xmlns:tools="http://schemas.android.com/tools"
 5 android:layout_width="match_parent"
 6 android:layout_height="match_parent"
 7 android:orientation="vertical"
 8 tools:context=".MainActivity" >
 9 
10 <Button
11     android:id="@+id/btn_1"
12     android:layout_width="match_parent"
13     android:layout_height="wrap_content"
14     android:onClick="MyClick"
15     android:text="对话框" />
16 
17 <Button
18     android:id="@+id/btn_2"
19     android:layout_width="match_parent"
20     android:layout_height="wrap_content"
21     android:text="自定义对话框"
22     android:onClick="MyClick"
23     />
24 </LinearLayout>

 

②自定义对话框布局dialog_main.xml

1 <?xml version="1.0" encoding="utf-8"?>
 2 <androidx.constraintlayout.widget.ConstraintLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     xmlns:app="http://schemas.android.com/apk/res-auto"
 5     xmlns:tools="http://schemas.android.com/tools"
 6     android:layout_width="match_parent"
 7     android:layout_height="wrap_content"
 8     android:layout_gravity="center_horizontal"
 9     android:background="@drawable/dialog_bg">
10 
11     <TextView
12         android:id="@+id/textView"
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content"
15         android:layout_marginTop="356dp"
16         android:text="您确定要退出吗?"
17         android:textColor="#EF0A0A"
18         android:textSize="40sp"
19         android:textStyle="bold"
20         app:layout_constraintEnd_toEndOf="parent"
21         app:layout_constraintHorizontal_bias="0.62"
22         app:layout_constraintStart_toStartOf="parent"
23         app:layout_constraintTop_toTopOf="parent" />
24 
25     <LinearLayout
26         android:layout_width="409dp"
27         android:layout_height="184dp"
28         android:orientation="horizontal"
29         app:layout_constraintBottom_toBottomOf="parent"
30         app:layout_constraintEnd_toEndOf="parent"
31         app:layout_constraintHorizontal_bias="0.487"
32         app:layout_constraintStart_toStartOf="parent"
33         app:layout_constraintTop_toBottomOf="@+id/textView"
34         android:gravity="center_vertical"
35         app:layout_constraintVertical_bias="0.251">
36 
37         <Button
38             android:id="@+id/yesbutton"
39             android:layout_width="80dp"
40             android:layout_height="50dp"
41             android:layout_weight="1"
42             android:layout_marginLeft="40dp"
43             android:background="@drawable/yes_btn" />
44 
45         <Button
46             android:id="@+id/nobutton"
47             android:layout_width="80dp"
48             android:layout_height="50dp"
49             android:layout_marginRight="40dp"
50             android:layout_marginLeft="20dp"
51             android:layout_weight="1"
52             android:background="@drawable/no_btn" />
53     </LinearLayout>
54 </androidx.constraintlayout.widget.ConstraintLayout>

 

三、对话框功能实现

1、普通对话框和自定义对话框功能(导入样式功能)MainActivity.java

1 package com.example.adf520;
 2 
 3 import androidx.appcompat.app.AlertDialog;
 4 import androidx.appcompat.app.AppCompatActivity;
 5 
 6 import android.app.Dialog;
 7 import android.content.DialogInterface;
 8 import android.os.Bundle;
 9 import android.view.View;
10 import android.widget.Button;
11 
12 public class MainActivity extends AppCompatActivity {
13 Button btn_1,btn_2;//声明对话框按钮、自定义对话框
14 
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.activity_main);
19        btn_1=findViewById(R.id.btn_1);//寻找对话框按钮ID
20        btn_2=findViewById(R.id.btn_2);//寻找自定义对话框按钮ID
21 
22 
23     }
24 //实现按钮交互功能
25     public void MyClick(View view) {
26         switch (view.getId()){  //通过多分支选择判断:当选中对话框时,执行对话框按钮
27             case R.id.btn_1:
28                 AlertDialog.Builder builder=new AlertDialog.Builder(this);//AlertDialog创建一个Builder实例化建立器
29                 //通过builder实例化建立器来调用对话框属性:
30                 builder.setTitle("提示"); //设置对话框标题
31                 builder.setMessage("您是否退出?");//设置对话框信息提示
32                 builder.setNegativeButton("NO",null);//对话框信息提示,选择取消
33                 builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
34                     //对话框信息提示,选项按钮,选择"YES"将执行DialogInterface监听器里面方法,执行退出
35                     @Override
36                     public void onClick(DialogInterface dialog, int which) {
37                         finish();
38                     }
39                 });
40 
41                 builder.show();//对话框展示
42                 break;
43             //通过多分支选择判断:当选中对话框时,执行自定义对话框按钮
44             case R.id.btn_2:
45                mydialog mydialog=new mydialog(this,R.style.mydialog);
46                //实例化mydialog设置参数( 参数1:环境上下文 (这里设置this), 参数2:导入样式R.style/样式名)
47                mydialog.show();//展示效果
48                break;
49         }
50     }
51 
52 //    public void show(){
53 //        AlertDialog dialog=new AlertDialog.Builder(this).create();
54 //        dialog.setTitle("提示");
55 //        dialog.setMessage("您确定要退出吗?");
56 //        dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
57 //            @Override
58 //            public void onClick(DialogInterface dialog, int which) {
59 //
60 //            }
61 //        });
62 //        dialog.show();
63 //    }
64 
65 
66 
67 
68 }

2、mydialog.java自定义对话框功能实现(两个判断按钮交互功能)

1 package com.example.adf520;
 2 
 3 import android.app.Dialog;
 4 import android.content.Context;
 5 import android.view.View;
 6 
 7 import androidx.annotation.NonNull;
 8 
 9 public class mydialog extends Dialog {
10 
11     public mydialog(@NonNull Context context, int themeResId) {
12         super(context, themeResId);
13         setContentView(R.layout.dialog_main);//输出自定义对话框布局
14 
15 /**总结自定义对话框步骤:
16  * ①设计自定义对话框布局样式--》dialog_layout.xml
17  * ②设计style文件(关闭自定义对话框的标题、去除背景(把背景设置成透明色))
18  *③ 将第一步的布局应用到当前自定义对话框(mydialog.java中设置,另外也要实现YES按钮和NO按钮的响应功能)
19  * ④在MainActivity.java实例化对话框(参数1:环境上下文(默认设置:this),参数2:导入样式R.style/样式名     ;并且show()方法展示出对话框效果)
20  */
21 
22 
23 
24 
25         //YES按钮安装监听器,实现响应功能
26         findViewById(R.id.yesbutton).setOnClickListener(new View.OnClickListener() {
27             @Override
28             public void onClick(View v) {
29                 System.exit(0);      //自定义对话框点击YES按钮时,执行退出
30             }
31         });
32             //NO按钮安装监听器,实现响应功能
33         findViewById(R.id.nobutton).setOnClickListener(new View.OnClickListener() {
34             @Override
35             public void onClick(View v) {
36               dismiss();  //自定义对话框点击NO按钮时,取消
37             }
38         });
39     }
40 }

 

四、自定义对话框样式设置,Res/style.xml

1 <resources>
 2 
 3     <!-- Base application theme. -->
 4     <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
 5         <!-- Customize your theme here. -->
 6         <item name="colorPrimary">@color/colorPrimary</item>
 7         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
 8         <item name="colorAccent">@color/colorAccent</item>
 9     </style>
10                  <!--  设置自定义对话框样式:①导入对话框样式模板  -->
11     <style name="mydialog" parent="android:style/Theme.Dialog">
12         <item name="android:windowNoTitle">true</item>
13              <!--   设置关闭自定义对话框标题    -->
14         <item name="android:windowBackground">@android:color/transparent</item>
15              <!--   设置自定义对话框背景颜色为透明    -->
16     </style>
17 
18 </resources>