原CSDN博客已弃用,文章会逐渐迁移过来。

一、自定义对话框
实现步骤:

1.自定义一个类,继承于Dialog类,在构造方法中调用setContentView(R.layout.xx)来设定对话框的布局

2.设定自定义对话框的风格(不显示标题栏,不显示背景),由于继承了Dialog,默认添加了Dialog标题的一栏

3.找到res–>values–>styles.xml设置风格

4.调用含设定对话框风格参数的构造

5.对自定义对话框中的某些控件添加事件

6.实例化自定义的对话框,显示

一、新建对话框的布局文件(即弹出的对话框的样子)

layout.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:orientation="vertical"  
    android:gravity="center_horizontal"  
    android:background="#FFFF00"  
    android:padding="10dp">  
    <TextView  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="提示"  
        android:textSize="34sp"  
        android:textStyle="bold"  
        android:layout_marginTop="30dp"/>  
    <View  
        android:layout_width="match_parent"  
        android:layout_height="2dp"  
        android:background="#ffffff"  
        android:layout_marginTop="10dp"  
        android:layout_marginBottom="10dp"/>  
    <TextView  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="您确定要退出当前程序么"  
        android:layout_marginTop="10dp"  
        android:textSize="20dp"/>  
    <LinearLayout  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:orientation="horizontal"  
        android:gravity="center_horizontal">  
        <Button  
            android:id="@+id/btn1"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="否"  
            android:onClick="onClick"  
            />  
        <Button  
            android:id="@+id/btn2"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="是"  
            android:onClick="onClick"  
            />  
    </LinearLayout>  

</LinearLayout>  

二、设置弹出对话框的点击按钮

activity.xml
<?xml version=”1.0” encoding=”utf-8”?>

    <Button  
        android:id="@+id/btn1"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:text="自定义对话框"  
        android:onClick="onClick"  
        />  
</LinearLayout>  

三、设置对话框的风格样式

在style.xml中添加如下代码

因为自定义的MyDialog是继承于Dialog,所以会默认添加了Dialog的标题这一栏非常不美观,因此使用重新自定义对话框的风格样式。name=”android:windowNoTitle”设置为true代表无窗口标题,android:windowBackground表示对话框背景,@android:color/transparent为使用透明色。

完整的style文件在app–>res–>values–>styles.xml,完整代码如下:

styles.xml

    <resources>  
    <!-- Base application theme. -->  
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">  
        <!-- Customize your theme here. -->  
        <item name="colorPrimary">@color/colorPrimary</item>  
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>  
        <item name="colorAccent">@color/colorAccent</item>  
    </style>  
    <style name="mydialog" parent="android:style/Theme.Dialog">  
        <item name="android:windowNoTitle">true</item>  
        <item name="android:windowBackground">@android:color/transparent</item>  
    </style>  
</resources>  

四、建立MyDialog类继承Dialog类实现对话框管理

MyDialog.java
package com.administrator.dialogtest;

import android.app.Dialog;  
import android.content.Context;  
import android.support.annotation.NonNull;  
import android.view.View;  
import android.widget.Button;  

/** 
 * Created by Administrator on 2018/5/7. 
 */  

public class MyDialog extends Dialog {  
    public MyDialog(@NonNull Context context) {  
//        super(context);//父类的满足子参数形式的构造方法  
        super(context,R.style.mydialog);//调用父类的含参构造方法,从而将风格设置到mydialog的样式上面  
        setContentView(R.layout.layout);//设置对话框的  



        //对自定义Dialog中的按钮添加点击事件  
        Button yesButton = (Button)findViewById(R.id.btn2);  
        Button noButton = (Button)findViewById(R.id.btn1);  

        noButton.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                dismiss();//控制对话框消失  
            }  
        });  
        yesButton.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                System.exit(0);  
            }  
        });  
    }  
//    //也可以直接重写含两个参数的构造方法,外部传入样式  
//    public MyDialog(@NonNull Context context, int themeResId) {  
//        super(context, themeResId);  
//        setContentView(R.layout.layout);  
//    }  
    //外部调用时,MyDialog dialog = new MyDialog(this,R.style.mydialog);  
    //dialog.show();  
}  

五、在MainActivity中调用

MainActivity.java
package com.administrator.dialogtest;

import android.app.AlertDialog;  
import android.app.ProgressDialog;  
import android.content.DialogInterface;  
import android.support.v7.app.AppCompatActivity;  
import android.os.Bundle;  
import android.util.Log;  
import android.view.View;  
import android.widget.Button;  
import android.widget.EditText;  
import android.widget.ProgressBar;  
import android.widget.Toast;  

public class MainActivity extends AppCompatActivity implements View.OnClickListener{  

    private Button btn1;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        Button btn = findViewById(R.id.btn1);  
    }  

    @Override  
    public void onClick(View v) {  
        switch (v.getId()) {  
            case R.id.btn1:  
                //1.自定义一个类,继承于Dialog类,在构造方法中调用setContentView(R.layout.xx)来设定对话框的布局  
                //2.设定自定义对话框的风格(不显示标题栏,不显示背景),由于继承了Dialog,默认添加了Dialog标题的一栏  
                //3.找到res-->values-->styles.xml设置风格  
                //4.调用含设定对话框风格参数的构造  
                //5.对自定义对话框中的某些控件添加事件  
                //6.实例化自定义的对话框,显示  
                MyDialog dialog = new MyDialog(this);  
                dialog.show();  
                break;  
        }  
    }  
}  

二、添加适配器案例

新建一个布局array_item_layout.xml作为适配器所引用的资源数据源

array_item_layout.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:orientation="horizontal"  
    android:padding="10dp"  
    android:gravity="center_vertical">  

    <ImageView  
        android:layout_width="40dp"  
        android:layout_height="40dp"  
        android:src="@mipmap/ic_launcher"/>  
    <TextView  
        android:id="@+id/item_txt"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="测试"  
        android:layout_marginLeft="15dp"/>  
</LinearLayout>`  

在activity_main.xml中添加触发对话框的点击按钮布局

activity_main.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:orientation="vertical"  
    android:gravity="center_horizontal"  
    android:padding="10dp">  
    <Button  
        android:id="@+id/btn2"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:text="适配器案例"  
        android:onClick="onClick"  
        />  
</LinearLayout>  

Java文件中创建适配器并调用

MainActivity.java

    package com.administrator.dialogtest;  

import android.app.AlertDialog;  
import android.app.ProgressDialog;  
import android.content.DialogInterface;  
import android.support.v7.app.AppCompatActivity;  
import android.os.Bundle;  
import android.util.Log;  
import android.view.View;  
import android.widget.ArrayAdapter;  
import android.widget.Button;  
import android.widget.EditText;  
import android.widget.ProgressBar;  
import android.widget.Toast;  

public class MainActivity extends AppCompatActivity implements View.OnClickListener{  

    private Button btn2;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        Button btn2 = findViewById(R.id.btn1);  
    }  

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

    private void showArrayDialog() {  
        final String[] items = {"Java","Mysql","Android","Html","C","JavaScript"};  
        //数组适配器  
        //参数1:环境  
        //参数2:布局资源索引,指的是每一项数据所呈现的样式android.R.layout.xxx  
        //参数3:数据源  
//        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line,items);  

        //参数4:数据源  
        //参数3:int textViewId 指定文本数据源需要放在布局中对应id文本控制的位置  
        //参数2:布局资源索引  
        //参数1:环境  
        ArrayAdapter adapter = new ArrayAdapter(this,R.layout.array_item_layout,R.id.item_txt,items);  
        AlertDialog.Builder builder = new AlertDialog.Builder(this)  
                .setTitle("请选择:")  
                //参数1:适配器对象(对数据显示样式的规则制定器)  
                //参数2:监听器  
                .setAdapter(adapter, new DialogInterface.OnClickListener() {  
                    @Override  
                    public void onClick(DialogInterface dialog, int which) {  
                        Toast.makeText(MainActivity.this,items[which],Toast.LENGTH_SHORT).show();  
                        dialog.dismiss();//点击后,让对话框消失  
                    }  
                });  
        builder.show();  
    }  
}