1 第一单元 Dialog及自定义 Dialog

这篇博客详细介绍了如何在Android中实现Dialog的自定义,包括普通对话框、单选、多选、自定义布局、水平进度条、圆形进度条、日期和时间选择等。通过继承Dialog类,重写方法和设置属性,可以创建满足不同需求的对话框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路

1.自定义继承Dialog类
2.重写Dialog的方法并添加需要的功能
3.在Activity实例化自定义的对象

继承Dialog类
在这里插入图片描述
setGravity(); 对齐方式
setContentView(); 显示内容

在这里插入图片描述
set Attributes();设置属性
setCanceledOnTouchOutside(true);点击外部消失

Dialog简单使用

1.普通对话框

在这里插入图片描述


    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    //构造者
    builder.setIcon(R.drawable.ic_launcher_background);
    //设置属性
    builder.setTitle("标题");
    builder.setMessage("信息");
    //设置确定按钮
    builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(normal_dialog.this, "您点击了OK", Toast.LENGTH_SHORT).show();
        }
    });
    //设置取消按钮
    builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(normal_dialog.this, "您点击了cancel", Toast.LENGTH_SHORT).show();
        }
    });
    //使用建造者创建对象
    AlertDialog alertDialog = builder.create();
    //显示
    alertDialog.show();

2.单选对话框

在这里插入图片描述



    //构造者
    final AlertDialog.Builder builder=new AlertDialog.Builder(this);
    //TODO 2:设置属性
    builder.setIcon(R.drawable.ic_launcher_background);//设置图标
    builder.setTitle("您的性别是");//设置标题
    builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(normal_dialog.this, "您点击了取消", Toast.LENGTH_SHORT).show();
        }
    });
    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });
    final String[] item = {"男","女"};
    //设置单选列表
    //参数1 列表 参数2 默认选中下标 参数3 事件监听
    builder.setSingleChoiceItems(item, 0, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(normal_dialog.this, "您选择了"+item[which], Toast.LENGTH_SHORT).show();
        }
    });
    
    AlertDialog alertDialog = builder.create();
    alertDialog.show()

3.多选框

在这里插入图片描述



    final String[] item = {"小明","大明","小花"};
    final boolean[] flags = {true,true,true,false};
    
    //构造者
    final AlertDialog.Builder builder=new AlertDialog.Builder(this);
    //设置属性
    builder.setIcon(R.drawable.ic_launcher_background);//设置图标
    builder.setTitle("您的好朋友是");//设置标题
    builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });
    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            for (int i = 0; i < flags.length; i++) {
                if(flags[i]){
                    Toast.makeText(normal_dialog.this, ""+item[i], Toast.LENGTH_SHORT).show();
                }
            }
        }
    });
    //设置多选列表
    //参数一 列表  参数二 默认选中下表  参数三 事件监听
    builder.setMultiChoiceItems(item, flags, new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            flags[which]=isChecked;
        }
    });
    //使用建造者创建对话框
    AlertDialog alertDialog = builder.create();
    //显示
    alertDialog.show();
  

4.自定义对话框

自定义布局

在这里插入图片描述



    <?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">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="picture"
            android:textSize="30dp"/>
        <ImageView
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:id="@+id/image1"
            android:background="@drawable/ic_launcher_background" />
    
    </LinearLayout>
    

java代码




    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    setContentView(R.layout.activity_normal_dialog);
    final View view = LayoutInflater.from(this).inflate(R.layout.item, null);
    ImageView imageView = view.findViewById(R.id.image1);
    imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(normal_dialog.this, "您点击了图片", Toast.LENGTH_SHORT).show();
        }
    });
    builder.setView(view);
    final AlertDialog alertDialog = builder.create();
    
    alertDialog.show();
        
     

5.水平进度条对话框

在这里插入图片描述



    //构造者
    final ProgressDialog dialog = new ProgressDialog(this);
    //设置属性
    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置水平央视
    dialog.setMax(100);
    dialog.setMessage("正在下载");
    //显示
    dialog.show();
    //模拟定位器
    final Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        int progress=0;
        @Override
        public void run() {
            if (progress==100){
                dialog.dismiss();
                timer.cancel();
            }
            dialog.setProgress(progress+=20);
        }
    },0,1000);//0秒后执行,每隔1000毫秒执行一次
    

6.圆形进度条对话框

在这里插入图片描述



     //实例化对象
     final ProgressDialog dialog = new ProgressDialog(this);
    //设置属性
     dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
     dialog.setMax(200);
     dialog.setMessage("正在下载");
     //显示
     dialog.show();
     final Timer timer = new Timer();
     timer.schedule(new TimerTask() {
         int progress = 0;
         @Override
         public void run() {
             if (progress==100){
                 dialog.dismiss();//消失
                 timer.cancel();
    
             }
             dialog.setProgress(progress+=20);
         }
     },0,1000);

7.日期对话框

在这里插入图片描述



    final Calendar calendar = Calendar.getInstance();//日历对象
    new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            Toast.makeText(normal_dialog.this, year+"-"+month+"-"+dayOfMonth, Toast.LENGTH_SHORT).show();
        }
    },calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)).show();

8. 时间对话框

在这里插入图片描述



    /**
     * context 上下文
     * listener 监听器
     * hourofDay 小时
     * minute 默认的分钟
     * is24HourView 是否才用24小时
     *
     */
    final Calendar calendar = Calendar.getInstance();//日历对象
    new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            Toast.makeText(normal_dialog.this, hourOfDay+":"+minute, Toast.LENGTH_SHORT).show();
        }
    },calendar.get(Calendar.HOUR),calendar.get(Calendar.MINUTE),true).show();

二、自定义对话框

在这里插入图片描述

思路
1.重写interface
2.自定义类继承Dialog
3.重写Dialog的方法并添加需要的功能
4.在Activity中实例化自定义类的对象

1.重写interface
在这里插入图片描述



    public interface MyLiserten {
        void yes();
        void no();
    }

2.自定义类继承Dialog
3.重写Dialog的方法并添加需要的功能



    public class normal_dialog extends Dialog{
        private Button yes ;//确定按钮
        private Button no;//取消按钮
        private String yes_text;//确定按钮的文字
        private String no_text;//取消按钮的文字
        MyLiserten myLiserten;
        public normal_dialog(Context context) {
            super(context);
        }
    
        public normal_dialog(Context context, int themeResId) {
            super(context, themeResId);
        }
    
        protected normal_dialog(Context context, boolean cancelable,DialogInterface.OnCancelListener cancelListener) {
            super(context, cancelable, cancelListener);
        }
    
        public void setYes_text(String yes_text) {
            this.yes_text = yes_text;
        }
    
        public void setNo_text(String no_text) {
            this.no_text = no_text;
        }
    
        public void setMyLiserten(MyLiserten myLiserten) {
            this.myLiserten = myLiserten;
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);////去除标题,在setContentView之前调用,否则报错
    
            setContentView(R.layout.item);
            yes = findViewById(R.id.yes);
            no = findViewById(R.id.no);
            yes.setText(yes_text);
            no.setText(no_text);
            yes.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    myLiserten.yes();
                }
            });
            no.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    myLiserten.no();
                }
            });
        }
    }

主线程代码



    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            final normal_dialog normal_dialog = new normal_dialog(this);
            normal_dialog.setNo_text("取消");
            normal_dialog.setYes_text("确认");
            normal_dialog.setMyLiserten(new MyLiserten() {
                @Override
                public void yes() {
                    normal_dialog.dismiss();
                }
    
                @Override
                public void no() {
                    Toast.makeText(MainActivity.this, "您点击了取消", Toast.LENGTH_SHORT).show();
                }
            });
            normal_dialog.show();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值