Android学习之对话框

对话框

普通对话框

创建普通对话框

public void alertDialog(View view) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setTitle("提示");
        builder.setMessage("你确定退出吗");

        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(DialogActivity.this,"取消",Toast.LENGTH_SHORT).show();
            }
        });

        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(DialogActivity.this,"确定",Toast.LENGTH_SHORT).show();
            }
        });

        builder.show();
    }

在这里插入图片描述

单选对话框

创建单选对话框

public void singleChoiceDialog(View view) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setTitle("请选择你喜欢的明星");

        String[] items = {"王家卫", "刘德华", "王渤", "肖战"};
        //第一个参数是给用户选择的选项,第二个参数是默认选中哪个选项,第3个参数是点击事件监听
        builder.setSingleChoiceItems(items, 3, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(DialogActivity.this,items[which],Toast.LENGTH_SHORT).show();
                dialog.dismiss(); // 取消对话框
            }
        });

        builder.show();
    }

在这里插入图片描述

多选对话框

创建多选对话框

public void multiChoiceDialog(View view) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setTitle("请选择你喜欢的水果");

        String[] items = {"香蕉","荔枝","苹果", "橘子","圣女果"};
        boolean[] checked = new boolean[]{false, true, true, false, false};
        //第一个参数是选项数组,第二个参数是代表选项是否被选中的boolean类型的数组,第3个参数是点击事件监听
        builder.setMultiChoiceItems(items, checked, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                //which:哪个选项被选中
                //isChecked:被选中的选项的状态
                checked[which] = isChecked;
                for (int i = 0; i < items.length; i++) {
                    if (checked[i]) {
                        System.out.println(items[i] + "被选中");
                    }
                }
            }
        });

        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        });

        builder.show();
    }

在这里插入图片描述

进度条对话框

创建进度条对话框

 public void progressDialog(View view) {
        ProgressDialog progressDialog = new ProgressDialog(this);

        //设置当前的对话框样式为水平
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

        //给对话框设置标题
        progressDialog.setTitle("正在玩命下载中");

        //给对话框设置最大进度
        progressDialog.setMax(100);

        //显示对话框
        progressDialog.show();

        //开启线程更新下载进度
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 100; i++) {
                    //进度条对话框可以在子线程更新进度
                    progressDialog.setProgress(i);
                    SystemClock.sleep(100);
                }

            }
        }).start();
    }

在这里插入图片描述

自定义对话框

1.设计自定义对话框样式–>dialog_layout.xml

public class MyDialog extends Dialog {

    public MyDialog(@NonNull Context context) {
        super(context);

        //为对话框设置布局
        setContentView(R.layout.dialog_layout);

        //设置点击事件
        findViewById(R.id.yes_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //退出
                System.exit(0);
            }
        });

        //设置点击事件
        findViewById(R.id.no_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dismiss();
            }
        });

    }

}

dialog_layout.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@mipmap/dialog_bg"
    android:gravity="center_horizontal">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="真的要退出吗?"
        android:textSize="34sp"
        android:textColor="#e61414"
        android:textStyle="bold"
        android:layout_marginTop="265dp"/>



    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_margin="25dp">
        <Button
            android:id="@+id/yes_btn"
            android:layout_width="120dp"
            android:layout_height="50dp"
            android:background="@mipmap/yes_btn"/>
        <Button
            android:id="@+id/no_btn"
            android:layout_width="120dp"
            android:layout_height="50dp"
            android:background="@mipmap/no_btn"
            android:layout_marginLeft="20dp"/>
    </LinearLayout>



</LinearLayout>

2.设计style,去标题,去背景;

    <style name="myDialog" parent="Theme.AppCompat.Dialog">
        <!--窗口没有标题-->
        <item name="windowNoTitle">true</item>
        <!--没有背景-->
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

3.将第一步的布局应用到当前自定义对话框,同时设置style;
4.实例化对话框(参数1:环境上下文,参数2:第二步创建的),并展示show();

MyDialog dialog = new MyDialog(this,R.style.myDialog);
                dialog.show();

在这里插入图片描述

PopupWindow

创建PopupWindow的步骤:

  1. 创建PopupWindow对象实例;
  2. 设置背景、注册事件监听器和添加动画;
  3. 显示PopupWindow;

创建弹出式对话框的代码

public void showPopupWindow(View view) {
        //实例化对象
        //将布局转换成java对象
        View v = LayoutInflater.from(this).inflate(R.layout.popup_layout, null);
        //参数1:用在弹窗中的View
        //参数2、3:弹窗的宽高
        //参数4:focusable:能否获取焦点
        PopupWindow popupWindow = new PopupWindow(v, 190, 35, true);

        //设置(背景、动画)
        popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        //设置能响应外部的点击事件
        popupWindow.setOutsideTouchable(true);
        //设置能响应点击事件
        popupWindow.setTouchable(true);

        //创建动画资源,创建一个style应用动画资源 对当前弹窗的动画风格设置为第二部的资源索引
        popupWindow.setAnimationStyle(R.style.translate_anim);

        //显示
        //参数1(anchor):锚
        //参数2、3:相对于锚在x、y方向上的偏移量
        popupWindow.showAsDropDown(view,100, 50);


        //为弹窗中的文本添加点击事件
        v.findViewById(R.id.choose).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "您点击了选择", Toast.LENGTH_SHORT).show();
                popupWindow.dismiss();
            }
        });

        v.findViewById(R.id.choose_all).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "您点击了选择所有", Toast.LENGTH_SHORT).show();
                popupWindow.dismiss();
            }
        });

        v.findViewById(R.id.copy).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "您点击了选择复制", Toast.LENGTH_SHORT).show();
                popupWindow.dismiss();
            }
        });




    }

在styles.xml文件中声明了如下的样式:

    <style name="translate_anim">
        <!--窗体进入动画-->
        <item name="android:windowEnterAnimation">@anim/translate</item>
    </style>

这个样式指向的是一个动画样式文件translate.xml,需要在res目录下创建anim目录,然后再创建translate.xml文件

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0"
        android:toXDelta="0"
        android:fromYDelta="300"
        android:toYDelta="0"
        android:duration="2000"
        ></translate>
</set>

popup_layout.xml文件,弹出对话框的布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#00ffff"
    android:padding="2dp">

    <TextView
        android:id="@+id/choose"
        android:layout_width="60dp"
        android:layout_height="30dp"
        android:text="选择"
        android:textColor="#ffffff"
        android:gravity="center"
        android:background="#000000"/>

    <View
        android:layout_width="2dp"
        android:layout_height="30dp"
        android:background="#00ffff" />

    <TextView
        android:id="@+id/choose_all"
        android:layout_width="60dp"
        android:layout_height="30dp"
        android:text="全选"
        android:textColor="#ffffff"
        android:gravity="center"
        android:background="#000000"/>

    <View
        android:layout_width="2dp"
        android:layout_height="30dp"
        android:background="#00ffff" />

    <TextView
        android:id="@+id/copy"
        android:layout_width="60dp"
        android:layout_height="30dp"
        android:text="复制"
        android:textColor="#ffffff"
        android:gravity="center"
        android:background="#000000"/>
</LinearLayout>

在这里插入图片描述

参考

  1. 对话框
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值