第一天——对话框

对话框

普通的对话框

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setIcon(R.drawable.ic_launcher_background);

        builder.setTitle("hello body");
        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();     
            }
        });

        AlertDialog alertDialog = builder.create();

        alertDialog.show();

在这里插入图片描述

单选对话框

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);


        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setIcon(R.drawable.ic_launcher_background);
        builder.setTitle("请选择您的出生地");

        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(Main2Activity.this, "您点击了确认按钮", Toast.LENGTH_SHORT).show();
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(Main2Activity.this, "您点击了取消按钮", Toast.LENGTH_SHORT).show();
            }
        });

        final String[] items = {"北京","成都","西安"};//自定义数组


        builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {//单选对话框的特有属性
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(Main2Activity.this, "您选中的城市是"+items[which], Toast.LENGTH_SHORT).show();
            }
        });

        AlertDialog alertDialog = builder.create();

        alertDialog.show();

在这里插入图片描述

多选对话框

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        String[] items = {"中国","日本","韩国","美国"};
        final boolean[] flasgs = {true,true,false,false};//便于判断是否是选中状态


        final AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setIcon(R.drawable.ic_launcher_background);
        builder.setTitle("下列哪些地区是中国的");

        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(Main3Activity.this, "您点击了确认按钮", Toast.LENGTH_SHORT).show();
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(Main3Activity.this, "您点击了取消按钮", Toast.LENGTH_SHORT).show();
            }
        });

        builder.setMultiChoiceItems(items, flasgs, new DialogInterface.OnMultiChoiceClickListener() {//多选对话框的特有属性
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                    flasgs[which] = isChecked;
            }
        });

        AlertDialog alertDialog = builder.create();

        alertDialog.show();

在这里插入图片描述

自定义对话框

java的代码

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);

        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setView(R.layout.style_layout);//使用自定义布局,让对话框呈现出对应的布局

        AlertDialog alertDialog = builder.create();

        alertDialog.show();

    }

对应布局的代码

<?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="这是一张图片"
        />
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/img1"/>

</LinearLayout>

在这里插入图片描述

带有水平进度条的对话框

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main5);

        final ProgressDialog dialog = new ProgressDialog(this);//这个是带有进度条的对话框

        dialog.setMessage("正在下载");
        dialog.setMax(100);
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置进度条的样式

        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+=1);
            }
        },0,100);
    }

在这里插入图片描述

带有环形进度条的对话框

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main6);

        final ProgressDialog dialog = new ProgressDialog(this);//这个是带有进度条的对话框


        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//设置进度条的样式
        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+=1);
            }
        },0,100);

    }

在这里插入图片描述

可选择日期的对话框

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main7);

        Calendar instance = Calendar.getInstance();//获取当前时间

        new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {//创建匿名内部类的日期对话框
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                Toast.makeText(Main7Activity.this, year+"-"+(month+1)+"-"+dayOfMonth, Toast.LENGTH_SHORT).show();//吐司,提示选中的时间
            }
        },instance.get(Calendar.YEAR),instance.get(Calendar.MARCH),instance.get(Calendar.DAY_OF_MONTH)).show();//将获取的当前时间存入到这个对话框中

    }

在这里插入图片描述

可选择时间的对话框

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main8);
        
        Calendar instance = Calendar.getInstance();//获取当前时间

        new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {//创建匿名内部类的日期对话框
            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                Toast.makeText(Main8Activity.this, "选中的时间是"+hourOfDay+":"+minute, Toast.LENGTH_SHORT).show();//吐司,提示选中的时间
            }
        },instance.get(Calendar.HOUR),instance.get(Calendar.MINUTE),true).show();//将获取的当前时间存入到这个对话框中
    }

在这里插入图片描述

自定义的对话框

创建一个自定义的对话框类,提供对应如何更改的方法

package com.example.day01;

import android.app.Dialog;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
//将这一个类作为自定义的一个对话框进行编写
public class DialogActivity extends Dialog {
    private TextView title;
    private TextView message;
    private Button no;
    private Button yes;

    private String titleStr;
    private String messageStr;
    private String yesStr, noStr;

    private onYesOnclickListener onYesOnclick;
    private onNoOnclickListener onNoClick;

    //进行设置该运行的内容的上下文

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

            //设置请求的页面大小
            requestWindowFeature(Window.FEATURE_NO_TITLE);
    }


    //创建让两个按钮可调用的方法
    public void setNoOnclickListener(String str, onNoOnclickListener onNoOnclickListener) {
        if (str != null) {//判断传输过来的值是否是空
            noStr = str;
        }
        this.onNoClick = onNoOnclickListener;//获取到传输过来的对应监听器
    }

    public void setYesOnclickListener(String str, onYesOnclickListener yesOnclickListener) {
        if (str != null) {
            yesStr = str;
        }
        this.onYesOnclick = yesOnclickListener;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog);//获取对应的一个对话窗的样式

        setCanceledOnTouchOutside(false);//设置除了对话框点击按钮外无法关闭

        title = (TextView) findViewById(R.id.title);//进行初始化
        message = (TextView) findViewById(R.id.message);
        no = (Button) findViewById(R.id.no);
        yes = (Button) findViewById(R.id.yes);


        intidata();//对初始化后的数据进行判断,是否更换其文本的数据

        intead();//内部存放有两个按钮的监听事件

    }

    private void intead() {
        yes.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onYesOnclick != null) {
                    onYesOnclick.onYesOnclick();//当此方法被调用的时候,让对应的本类方法也使用这个方法
                }
            }
        });
        //设置取消按钮被点击后,向外界提供监听
        no.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onNoClick != null) {
                    onNoClick.onNoClick();
                }
            }
        });
    }

    private void intidata() {//供这个自定义的方法更新数据
        if (titleStr != null) {
            title.setText(titleStr);
        }
        if (messageStr != null) {
            message.setText(messageStr);
        }
        if(yesStr !=null){
            yes.setText(yesStr);
        }
        if(noStr != null){
            no.setText(noStr);
        }
    }

    public void setTitle(String title) {//设置set方法,让对应的数据方便传入
        titleStr = title;
    }//获取实现这个类传输过来的数据

    public void setMessage(String message) {
        messageStr = message;
    }


    public interface onNoOnclickListener {//定义初始接口,让这个监听器和调用这个自定义对话框的类连接起来
        public void onNoClick();
    }

    public interface onYesOnclickListener {
        public void onYesOnclick();
    }

}

自定义的样式

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main3Activity">

    <LinearLayout
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="#95FF0000"
        android:orientation="vertical">
        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="10dp"
            android:text="警告"
            android:textColor="#651FFF"
            android:textSize="16sp"/>
        <TextView
            android:id="@+id/message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="28dp"
            android:layout_gravity="center"
            android:text="保护视力,少玩手机"/>
        <View
            android:layout_width="match_parent"
            android:layout_height="1px"
            android:layout_marginTop="15dp"
            android:background="#E4E4E4"/>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:orientation="horizontal">
            <Button
                android:id="@+id/no"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:layout_marginLeft="10dp"
                android:background="@null"
                android:gravity="center"
                android:lines="1"
                android:text="取消"
                android:textColor="#000000"
                android:textSize="16sp"/>
            <View
                android:layout_width="1px"
                android:layout_height="match_parent"
                android:background="#E4E4E4"/>
            <Button
                android:id="@+id/yes"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:layout_marginRight="10dp"
                android:background="@null"
                android:gravity="center"
                android:lines="1"
                android:text="确定"
                android:textColor="#651FFF"
                android:textSize="16sp"/>
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值