精华内容
下载资源
问答
  • 安卓Dialog

    2019-09-12 13:43:42
    (1) Dialog创建时是要先构造一个Builder,然后使用Builder对象设置Dialog,然后builder创建dialog,最后显示dialog即可。例如: AlertDialog.Builder builder= newAlertDialog.Builder(this...

     (1) Dialog创建时是要先构造一个Builder,然后使用Builder对象设置Dialog,然后builder创建dialog,最后显示dialog即可。例如:

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

    builder.setTitle("这是一个提示");

    builder.setMessage("这是一个提示窗口");

    builder.setPositiveButton("确定", null);

    AlertDialog dialog = builder.create();

    dialog.show();

    (2)也可以使用链式编程,链式编程,每调用一个方法都会返回修改后的builder,创建dialog后会返回一个AlertDialog的实例。例如:

    new AlertDialog.Builder(this).setTitle("提示").setMessage("两个按钮的提示窗").setNegativeButton("确定",null).setPositiveButton("取消",null).create().show();(3)弹出窗设置按钮时需要给按钮设置监听器,例如:

    203937_llsF_2896911.png

    总结:

    1.AlertDialog.Builder创建builder,

    2.builder调用setTitle()设置弹出窗标题,

    3.调用setItem(CharSequence[] items, OnClickListener listener)为弹出窗设置内容,监听器用于监听点击每列时需要做的操作。

    4.调用setSingleChoiceItems(CharSequence[] items, int checkedItem, OnClickListener listener)方法设置单选内容,当第二个参数为-1时表示没有选中任何内容。

    5.调用setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, OnMultiChoiceClickListener listener)方法设置多选内容,当没有选中任何内容时第二个参数将为空。

    6.调用setPositiveButton(),setNegativeButton(),

    setNeutralButton()等方法为弹出窗设置按钮。

    7.调用builder.create()方法创建弹出窗,调用show()方法显示弹出窗

    8.自定义内容的弹出窗:builder.setView(view);使用builder.setView方法为Dialog设置自定义的布局

    自定义样式的弹出窗:首先创建一个Dialog,传递自定义主题,然后调用setContentView()方法为其设置布局,调用dialog.getWindow().getAttributes();方法可以得到dialog的一些窗口参数,例如宽高等,最后还可以为dialog设置显示动画等。

    9.日期弹出窗:使用DatePickerDialog创建dialog。

    10.时间弹出窗:使用TimePickerDialog创建dialog。

    11.进度弹出窗:使用ProgressDialog创建dialog,setCanceledOnTouchOutside(true);触摸弹出窗以外的位置窗口是否消失

    setCancelable(false); 设置弹出窗是否可以取消 setProgressStyle();设置滚动条样式

    12.PopupWindow:可以创建类似对话框风格的窗口,需以下两步:调用PopupWindow构造器创建实例;调用showAsDropDown(view);方法将PopupWindow作为view组件的下拉组件显示出来,或调用showAsLocation()方法在特定位置显示PopupWindow.

                                                                 ----------------这些博客都是我之前在学习过程中自书中摘出的重点,以及一些前辈总结的经验,外加一些自己的感悟,如果有前辈看到,有不对的地方希望大家指出,非常感谢。

    转载于:https://my.oschina.net/qinqinyuan/blog/743886

    展开全文
  • 安卓dialog

    2017-11-28 13:54:16
    安卓系统原生提供了几种类型的对话框供用户选择,同时我们也可以根据自己的需要,创建新的对话框. 一确定取消对话框 /* 创建对话框构建器对象,类似工厂模式*/ AlertDialog.Builder builder = new Builder(this);...

    安卓系统原生提供了几种类型的对话框供用户选择,同时我们也可以根据自己的需要,创建新的对话框.

    一确定取消对话框

    
            /* 创建对话框构建器对象,类似工厂模式*/
    	AlertDialog.Builder builder = new Builder(this);
            /*设置标题和正文*/
        	builder.setTitle("警告");
        	builder.setMessage("若练此功,必先自宫");
            /* 设置确定和取消按钮*/
        	builder.setPositiveButton("现在自宫", new OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				Toast.makeText(MainActivity.this, "恭喜你自宫成功,现在程序退出", 0).show();
    			}
    		});
        	builder.setNegativeButton("下次再说", new OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				Toast.makeText(MainActivity.this, "若不自宫,一定不成功", 0).show();
    			}
    		});
            /* 使用构建器创建出对话框对象*/
        	AlertDialog ad = builder.create();
        	ad.show();

    二 单选对话框

    	final String[] items = new String[]{
        			"男", "女", "其他"
        	};
    		//-1表示没有默认选择
    		//点击侦听的导包要注意别导错
        	builder.setSingleChoiceItems(items, -1, new OnClickListener() {
    			
    			//which表示点击的是哪一个选项
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				Toast.makeText(MainActivity.this, "您选择了" + items[which], 0).show();
    				//对话框消失
    				dialog.dismiss();
    			}
        	});
        	
        	builder.show();

    三多选对话框

    	AlertDialog.Builder builder = new Builder(this);
        	builder.setTitle("请选择你认为最帅的人");
    /* 定义多选的选项,因为可以多选,所以需要一个boolean数组来记录哪些选项被选了*/ 
        	final String[] items = new String[]{
        			"老王",
        			"老K",
        			"老赵",
        			"侃哥"
        	};
    		//true表示对应位置的选项被选了
        	final boolean[] checkedItems = new boolean[]{
        			true,
        			false,
        			false,
        			false,
        	};
        	builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {
    
    			//点击某个选项,如果该选项之前没被选择,which用户点击的项目 那么此时isChecked的值为true
    			@Override
    			public void onClick(DialogInterface dialog, int which, boolean isChecked) {
    				checkedItems[which] = isChecked;
    			}
    		});
        	
        	builder.setPositiveButton("确定", new OnClickListener() {
    			
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				StringBuffer sb = new StringBuffer();
    				for(int i = 0;i < items.length; i++){
    					sb.append(checkedItems[i] ? items[i] + " " : "");
    				}
    				Toast.makeText(MainActivity.this, sb.toString(), 0).show();
    			}
    		});
        	builder.show();

    四 自定义dialog

    4.1使用布局页面的dialog,创建一个布局xml文件为dialog1.
      	AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setView(R.layout.dialog1);
            AlertDialog dialog = builder.create();
            dialog.show();
    4.2 修改默认弹框的位置等信息,这些修改信息要放在默认dialog的show方法调用之后
    //放在show()之后,不然有些属性是没有效果的,比如height和width
    Window dialogWindow = dialog.getWindow();
    WindowManager m = getWindowManager();
    Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
    WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
    //设置高度和宽度
    p.height = (int) (d.getHeight() * 0.4); // 高度设置为屏幕的0.6
    p.width = (int) (d.getWidth() * 0.6); // 宽度设置为屏幕的0.65
    //设置位置
    p.gravity = Gravity.BOTTOM;
    //设置透明度
    p.alpha = 0.5f;
    dialogWindow.setAttributes(p);





    展开全文
  • 博主做的教育类APP,教育类肯定有包含语数英,这些yingshi科目就有做题类型,自然就有相应的做题,校验做题答案需求,有校验判断就有对错之分,怎么比较好的反应并给用户良好的用户体验,就提出...安卓dialog实现对错动画控件
  • 自定义安卓Dialog

    2016-04-06 15:54:39
    仿IOS 自定义Dialog
  • 各种风格的安卓dialog

    千次阅读 2018-02-06 19:19:03
    本篇文章为大家介绍一些常用的安卓dialog,各种风格都有,相信应该能满足广大读者的需求 第一个是最普通的dialog,弹出一个提示对话框,用户可以选择确定,继续操作,或者点取消,取消操作 private void ...

    本篇文章为大家介绍一些常用的安卓dialog,各种风格都有,相信应该能满足广大读者的需求

    第一个是最普通的dialog,弹出一个提示对话框,用户可以选择确定,继续操作,或者点取消,取消操作


    private void showDialog() {
    		AlertDialog.Builder builder = new Builder(MainActivity.this);
    
    		builder.setTitle("提示");
    		builder.setMessage("这是一个普通对话框");
    
    		builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				//点击确认做的操作
    				dialog.dismiss();
    			}
    		});
    
    		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				//点击取消做的操作
    				dialog.dismiss();
    			}
    		});
    
    		builder.create().show();
    	}

    第二个展示的是一个列表对话框,用户可以从列表中点击选择需要的内容,我们需要传入一个String类型的数组


    private void showDialog() {
        	AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    		builder.setIcon(R.drawable.ic_launcher);
    		builder.setTitle("选择一个城市");
    		// 指定下拉列表的显示数据
    		final String[] cities = { "广州", "上海", "北京", "香港", "澳门" };
    		// 设置一个下拉的列表选择项
    		builder.setItems(cities, new DialogInterface.OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				Toast.makeText(MainActivity.this, "选择的城市为:" + cities[which], Toast.LENGTH_SHORT).show();
    			}
    		});
    		builder.show();
    	}

    第三个展示的是一个单选列表对话框,本对话框主要方法setSingleChoiceItems,需要传入三个参数,第一个参数String类型数组代表选项,第二个参数为int数字作为默认选中索引,这里要注意数组长度,不能大于数组长度,也不能为负数,否则数组越界,第三个参数给每一个单选项绑定一个监听器


    private void showDialog() {
        	AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    		builder.setIcon(R.drawable.ic_launcher);
    		builder.setTitle("请选择性别");
    		final String[] sex = { "男", "女", "未知性别" };
    		// 设置一个单项选择下拉框
    		/**
    		 * 第一个参数指定我们要显示的一组下拉单选框的数据集合 第二个参数代表索引,指定默认哪一个单选框被勾选上,1表示默认'女' 会被勾选上
    		 * 第三个参数给每一个单选项绑定一个监听器
    		 */
    		builder.setSingleChoiceItems(sex, 1, new DialogInterface.OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				Toast.makeText(MainActivity.this, "性别为:" + sex[which], Toast.LENGTH_SHORT).show();
    			}
    		});
    		builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    
    			}
    		});
    		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    
    			}
    		});
    		builder.show();
    	}



    第四个dialog为多选列表对话框,代码如下所示,各项参数含义可以看注释


    private void showDialog() {
        	AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    		builder.setIcon(R.drawable.ic_launcher);
    		builder.setTitle("爱好");
    		final String[] hobbies = { "篮球", "足球", "网球", "斯诺克" };
    		final boolean[] selectd = {false,true,false,true};
    		// 设置一个单项选择下拉框
    		/**
    		 * 第一个参数指定我们要显示的一组下拉多选框的数据集合
    		 * 第二个参数代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择,
    		 * 需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true};
    		 * 第三个参数给每一个多选项绑定一个监听器
    		 */
    		builder.setMultiChoiceItems(hobbies, selectd, new DialogInterface.OnMultiChoiceClickListener() {
    			StringBuffer sb = new StringBuffer(100);
    
    			@Override
    			public void onClick(DialogInterface dialog, int which, boolean isChecked) {
    				
    			}
    		});
    		builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    
    			}
    		});
    		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    
    			}
    		});
    		builder.show();
    	}



    第五个是一个自定义的对话框,我们可以自己在layout文件下建立一个布局,然后通过LayoutInflater加载布局,将获取到的View通过setView添加到dialog中,我们可以通过findViewById方法获取到dialog中的控件实例来操作dialog,具体使用如下所示,my_dialog为自定义的dialog所要加载的布局


    private void showDialog() {
        	//	    通过LayoutInflater来加载一个xml的布局文件作为一个View对象
            View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.my_dialog, null);
            final AlertDialog mDialog = new AlertDialog.Builder(MainActivity.this)
    				.setView(view).create();
    						
    		mDialog.setCancelable(true);
    		
    		final EditText editText = (EditText) view.findViewById(R.id.e_tv);
    		
    		view.findViewById(R.id.ok).setOnClickListener(new OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				Toast.makeText(MainActivity.this, editText.getText(), Toast.LENGTH_LONG).show();
    				mDialog.dismiss();
    			}
    		});
    
    		view.findViewById(R.id.cancel).setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				mDialog.dismiss();
    			}
    		});
    		mDialog.show();
    	}

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.example.redpoint.MainActivity" >
        
        <TextView 
            android:id="@+id/tv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="10dp"
            android:textSize="20sp"
            android:textColor="@android:color/holo_green_dark"
            android:text="这是一个自定义dialog"
            />
        
        <EditText
            android:id="@+id/e_tv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:layout_below="@id/tv1"
            android:hint="请输入内容"
            />
        
        <LinearLayout 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginBottom="20dp"
            android:layout_below="@id/e_tv"
            android:layout_alignParentRight="true"
            android:orientation="horizontal"
            >
            
        <TextView 
            android:id="@+id/ok"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:textColor="@android:color/holo_orange_dark"
            android:text="确认"
            />
        
        <TextView 
            android:id="@+id/cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="30dp"
            android:textSize="18sp"
            android:textColor="@android:color/holo_orange_dark"
            android:text="取消"
            />
        
        </LinearLayout>
           
    </RelativeLayout>


    第六个是一个圆形进度条加载对话框,比较简单


    private void showDialog() {
        	ProgressDialog dialog = new ProgressDialog(this);
        	 dialog.setMessage("正在加载中");
        	 dialog.show();
    	}


    第七个是设置一个水平的进度条并显示当前进度,只需要把他的样式设置为ProgressDialog.STYLE_HORIZONTAL即可。



    private void showDialog() {
        	final ProgressDialog dialog = new ProgressDialog(this);
            dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            dialog.setMessage("正在加载中");
            dialog.setMax(100);
            final Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                int progress = 0;
    
                @Override
                public void run() {
                    dialog.setProgress(progress += 5);
                    if (progress == 100) {
                        timer.cancel();
                    }
                }
            }, 0, 1000);
            dialog.show();
    	}


    下面为大家介绍一下如何设置dialog的样式,分为系统自带的和自定义的,首先来看一下系统自带的,图中的样式和代码中设置的顺序相同


    private void showDialog() {
    		@SuppressWarnings("deprecation")
    		AlertDialog.Builder builder = new Builder(MainActivity.this,AlertDialog.THEME_DEVICE_DEFAULT_DARK);
    //		AlertDialog.Builder builder = newBuilder(MainActivity.this,AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
    //		AlertDialog.Builder builder = new Builder(MainActivity.this,AlertDialog.THEME_HOLO_DARK);
    //		AlertDialog.Builder builder = new Builder(MainActivity.this,AlertDialog.THEME_HOLO_LIGHT);
    //		AlertDialog.Builder builder = new Builder(MainActivity.this,AlertDialog.THEME_TRADITIONAL);
    
    		builder.setTitle("提示");
    		builder.setMessage("这是一个普通对话框");
    
    		builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				//点击确认做的操作
    				dialog.dismiss();
    			}
    		});
    
    		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				//点击取消做的操作
    				dialog.dismiss();
    			}
    		});
    
    		builder.create().show();
    	}

    我们也可以自己为dialog在style文件中定义一个样式,如下


    private void showDialog() {
    		@SuppressWarnings("deprecation")
    		AlertDialog.Builder builder = new Builder(MainActivity.this,R.style.NormalDialogStyle);
    
    		builder.setTitle("提示");
    		builder.setMessage("这是一个普通对话框");
    
    		builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				//点击确认做的操作
    				dialog.dismiss();
    			}
    		});
    
    		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				//点击取消做的操作
    				dialog.dismiss();
    			}
    		});
    
    		builder.create().show();
    	}

    <!--对话框的样式-->
        <style name="NormalDialogStyle">
            <!--对话框背景 -->
            <item name="android:windowBackground">@android:color/transparent</item>
            <!--边框 -->
            <item name="android:windowFrame">@null</item>
            <!--没有标题 -->
            <item name="android:windowNoTitle">true</item>
            <!-- 是否浮现在Activity之上 -->
            <item name="android:windowIsFloating">true</item>
            <!--背景透明 -->
            <item name="android:windowIsTranslucent">false</item>
            <!-- 是否有覆盖 -->
            <item name="android:windowContentOverlay">@null</item>
            <!--背景变暗-->
            <item name="android:backgroundDimEnabled">true</item>
        </style>


    好了,关于dialog的相关知识就介绍这么多,本篇文章涵盖了大部分的dialog,如果普通的dialog无法满足你的要求,你可以通过自定义一个自己的dialog,通过自定义dialog,你可以实现各种各样的dialog,同时,你还可以根据个人喜好和需求来设置dialog的style,喜欢的朋友点个赞吧

    展开全文
  • 安卓dialog的使用+如何自定义dialog

    万次阅读 多人点赞 2018-06-19 22:40:28
    吐槽 哇哇哇,刚写一半win10给我蓝屏了,心塞塞,以后写一点保存一点。回到正题,看到产品给我的设计图,有辣么多的自定义的dialog,发现之前自己只会系统自带的dialog,但是这样根本满足不了产品的需求,...安卓...

    吐槽

    哇哇哇,刚写一半win10给我蓝屏了,心塞塞,以后写一点保存一点。回到正题,看到产品给我的设计图,有辣么多的自定义的dialog,发现之前自己只会系统自带的dialog,但是这样根本满足不了产品的需求,所以自己上周好好总结下,然后把产品给的需求完成。//哇哇哇,项目写不完了

    什么叫dialog

    简单来说就是一句话:
    弹出一个窗口,提示用户自己去选择,去提示,去分类的一些内容。
    安卓自带的dialog有三种:
    这里写图片描述
    - AlertDialog—-普通的提示对话框
    - ProgressDialog–进度条对话
    - DatePickerDialog/TimePickerDialog–日期对话框/时间对话框

    所有的对话框,都是直接或间接继承自Dialog类,而AlterDialog直接继承自Dialog,其他的几个类均继承自AlterDialog。

    系统自带的dialog基本上用AlertDialog类
     AlertDialog继承自Dialog类,对于Android内置的AlterDialog,它可以包含一个标题、一个内容消息或者一个选择列表、最多三个按钮。而创建AlterDialog推荐使用它的一个内部类AlterDialog.Builder创 建。使用Builder对象,可以设置AlterDialog的各种属性,最后通过Builder.create()就可以得到AlterDialog对 象,如果只是还需要显示这个AlterDialog,一般可以直接使用Builder.show()方法,它会返回一个AlterDialog对象,并且 显示它。
    //说这么多,还不如直接看下如何用

    下面我会讲三个层次的dialog的使用:

    • 简单的系统dialog调用//就是简单的系统dialog的调用
    • 半自定义的dialog//就是改变一些基础属性
    • 完全自定义dialog//自定义dialog类,自己写界面,点击事件
      ##简单的系统dialog
      简单的dialog也分好多种,但是我只说AlertDialog类的
      ###普通对话框
      这个就是最普通的那种,让你选择正确或者错误,也可以选择中立,这个是最常见的那种
      这里写图片描述
      用法很简单
    • 第一步:new个AlertDialog.Builder
    • 第二步:设置dialog的图标,文字,提示信息
    • 第三步:设置不同选择的点击事件
    • 第四步:显示dialog
     /**
         * 普通dialog
         */
        private void showAlterDialog(){
            final AlertDialog.Builder alterDiaglog = new AlertDialog.Builder(MainActivity.this);
            alterDiaglog.setIcon(R.drawable.icon);//图标
            alterDiaglog.setTitle("简单的dialog");//文字
            alterDiaglog.setMessage("生存还是死亡");//提示消息
            //积极的选择
            alterDiaglog.setPositiveButton("生存", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this,"点击了生存",Toast.LENGTH_SHORT).show();
                }
            });
            //消极的选择
            alterDiaglog.setNegativeButton("死亡", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this,"点击了死亡",Toast.LENGTH_SHORT).show();
                }
            });
           //中立的选择
            alterDiaglog.setNeutralButton("不生不死", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this,"点击了不生不死",Toast.LENGTH_SHORT).show();
                }
            });
    
            //显示
            alterDiaglog.show();
        }

    列表对话框

    直接看图吧
    这里写图片描述
    这个和普通的dialog差不多,只不过是从中数组选择一个确定点击事件

     /**
         * 列表Dialog
         */
        private void showListDialog(){
            final String[] items = {"我是1","我是2","我是3"};
            AlertDialog.Builder listDialog = new AlertDialog.Builder(MainActivity.this);
            listDialog.setIcon(R.drawable.icon);//图标
            listDialog.setTitle("我就是个列表Dialog");
            listDialog.setItems(items, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this,"点击了"+items[which],Toast.LENGTH_SHORT).show();
                }
            });
            listDialog.show();
        }

    单选对话框

    它和列表对话框区别是前面有选择的圆点
    也是一样的
    这里写图片描述

     /**
         * 单选Dialog
         */
        int choice;
        private void showSingDialog(){
            final String[] items = {"我是1","我是2","我是3"};
            AlertDialog.Builder singleChoiceDialog = new AlertDialog.Builder(MainActivity.this);
            singleChoiceDialog.setIcon(R.drawable.icon);
            singleChoiceDialog.setTitle("我是单选Dialo");
            //第二个参数是默认的选项
            singleChoiceDialog.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    choice= which;
                }
            });
            singleChoiceDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if (choice!=-1){
                        Toast.makeText(MainActivity.this,
                                "你选择了" + items[choice],
                                Toast.LENGTH_SHORT).show();
                    }
                }
            });
            singleChoiceDialog.show();
        }

    多选对话框

    在单选的基础上加了多选这个,就是选择的函数不一样
    这里写图片描述

     /**
         * 多选对话框
         */
        ArrayList<Integer> choices= new ArrayList<>();
        private void showMultiChoiceDialog(){
            final String[] items = {"我是1","我是2","我是3"};
            //设置默认选择都是false
            final boolean initchoices[] = {false,false,false};
            choices.clear();
            AlertDialog.Builder multChoiceDialog = new AlertDialog.Builder(MainActivity.this);
            multChoiceDialog.setIcon(R.drawable.icon);
            multChoiceDialog.setTitle("我是个多选Dialog");
            multChoiceDialog.setMultiChoiceItems(items, initchoices, new DialogInterface.OnMultiChoiceClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                    if (isChecked){
                        choices.add(which);
                    }else {
                        choices.remove(which);
                    }
                }
            });
            multChoiceDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    int size = choices.size();
                    String str = "";
                    for(int i = 0;i<size;i++){
                        str+=items[choices.get(i)]+"";
                    }
                    Toast.makeText(MainActivity.this,
                            "你选中了" + str,
                            Toast.LENGTH_SHORT).show();
                }
            });
            multChoiceDialog.show();
        }

    等待对话框

    等待Dialog具有屏蔽其他控件的交互能力
    @setCancelable 为使屏幕不可点击,设置为不可取消(false) 
    下载等事件完成后,主动调用函数关闭该Dialog
    这里写图片描述 

     private void showProgressDialog(){
            final int MAX = 100;
            final ProgressDialog progressDialog = new ProgressDialog(this);
            progressDialog.setTitle("我是个等待的Dialog");
            progressDialog.setMessage("等待中");
            progressDialog.setIndeterminate(true);
            progressDialog.setCancelable(false);
            progressDialog.show();
        }

    进度条对话框

    就是和那些app上一样,简单的一个等待的框
    这里写图片描述

    /**
         * 进度条Dialog
         */
        private void showWhiteDialog(){
            /* @setProgress 设置初始进度
             * @setProgressStyle 设置样式(水平进度条)
             * @setMax 设置进度最大值
             */
            final int Max = 100;
            final ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
            progressDialog.setProgress(0);
            progressDialog.setIcon(R.drawable.icon);
            progressDialog.setTitle("我是一个进度条Dialog");
            progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            progressDialog.setMax(Max);
            progressDialog.show();
            /**
             * 开个线程
             */
            new Thread(new Runnable() {
                @Override
                public void run() {
                    int p = 0;
                    while (p<Max){
                        try {
                            Thread.sleep(100);
                            p++;
                            progressDialog.setProgress(p);
                        }catch (InterruptedException e){
                            e.printStackTrace();
                        }
                    }
                    progressDialog.cancel();//达到最大就消失
                    }
    
            }).start();
        }

    半自定义对话框

    就是根据一些属性来自定义dialog,也可以添加自己的布局

    1控制不同普通的dialog的位置,大小,透明度

    这里写图片描述
    在不同的dialog的下面添加设置

     //自定义的东西
           //放在show()之后,不然有些属性是没有效果的,比如height和width
            Window dialogWindow = dialog.getWindow();
            WindowManager m = getWindowManager();
            Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
            WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
            // 设置高度和宽度
            p.height = (int) (d.getHeight() * 0.4); // 高度设置为屏幕的0.6
            p.width = (int) (d.getWidth() * 0.6); // 宽度设置为屏幕的0.65
    
            p.gravity = Gravity.TOP;//设置位置
    
            p.alpha = 0.8f;//设置透明度
            dialogWindow.setAttributes(p);

    整体的代码:

     /**
         * 自定义1 控制普通的dialog的位置,大小,透明度
         * 在普通的dialog.show下面添加东西
         */
        private void DiyDialog1(){
            AlertDialog.Builder alterDiaglog = new AlertDialog.Builder(MainActivity.this);
            alterDiaglog.setIcon(R.drawable.icon);//图标
            alterDiaglog.setTitle("简单的dialog");//文字
            alterDiaglog.setMessage("生存还是死亡");//提示消息
            //积极的选择
            alterDiaglog.setPositiveButton("生存", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this,"点击了生存",Toast.LENGTH_SHORT).show();
                }
            });
            //消极的选择
            alterDiaglog.setNegativeButton("死亡", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this,"点击了死亡",Toast.LENGTH_SHORT).show();
                }
            });
    
            alterDiaglog.setNeutralButton("不生不死", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this,"点击了不生不死",Toast.LENGTH_SHORT).show();
                }
            });
            AlertDialog dialog = alterDiaglog.create();
    
            //显示
            dialog.show();
            //自定义的东西
           //放在show()之后,不然有些属性是没有效果的,比如height和width
            Window dialogWindow = dialog.getWindow();
            WindowManager m = getWindowManager();
            Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
            WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
            // 设置高度和宽度
            p.height = (int) (d.getHeight() * 0.4); // 高度设置为屏幕的0.6
            p.width = (int) (d.getWidth() * 0.6); // 宽度设置为屏幕的0.65
    
            p.gravity = Gravity.TOP;//设置位置
    
            p.alpha = 0.8f;//设置透明度
            dialogWindow.setAttributes(p);
        }

    自定义简单dialog的布局

    把自己写的xml加载进去
    这里写图片描述
    第一步:自定义布局
    自己定义dialog_1.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_centerInParent="true"
            android:background="#ed093a">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:text="自定义加强版的dialog"
                android:textColor="#fff"/>
        </LinearLayout>
    </RelativeLayout>

    第二步:在主活动里面设置dialog
    然后把这个布局扔进去

        /**
         * 自定义dialog2 简单自定义布局
         */
        private void DiyDialog2() {
            AlertDialog.Builder alterDiaglog = new AlertDialog.Builder(MainActivity.this,R.style.MyDialog);
            alterDiaglog.setView(R.layout.dialog_1);//加载进去
            AlertDialog dialog = alterDiaglog.create();
            //显示
            dialog.show();
            //自定义的东西
        }

    完全自定义dialog

    重要来到了最重头戏了,然后自定义dialog然后满足产品的需求,你只需要按照如下步骤来:
    这里写图片描述
    1.在values/styles.xml新建一个样式MyDialog

    <style name="MyDialog" parent="android:Theme.Dialog">
        <!-- 背景颜色及透明程度 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 是否半透明 -->
        <item name="android:windowIsTranslucent">false</item>
        <!-- 是否没有标题 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 是否浮现在activity之上 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 是否背景模糊 -->
        <item name="android:backgroundDimEnabled">false</item>
        <!-- 设置背景模糊的透明度-->
        <item name="android:backgroundDimAmount">0.5</item>
    </style>

    2.新建一个MyDialog继承Dialog类

    public class MyDialog1 extends Dialog implements View.OnClickListener{
        //在构造方法里提前加载了样式
        private Context context;//上下文
        private int layoutResID;//布局文件id
        private int[] listenedItem;//监听的控件id
        public MyDialog1(Context context,int layoutResID,int[] listenedItem){
            super(context,R.style.MyDialog);//加载dialog的样式
            this.context = context;
            this.layoutResID = layoutResID;
            this.listenedItem = listenedItem;
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //提前设置Dialog的一些样式
            Window dialogWindow = getWindow();
            dialogWindow.setGravity(Gravity.CENTER);//设置dialog显示居中
            //dialogWindow.setWindowAnimations();设置动画效果
            setContentView(layoutResID);
    
    
            WindowManager windowManager = ((Activity)context).getWindowManager();
            Display display = windowManager.getDefaultDisplay();
            WindowManager.LayoutParams lp = getWindow().getAttributes();
            lp.width = display.getWidth()*4/5;// 设置dialog宽度为屏幕的4/5
            getWindow().setAttributes(lp);
            setCanceledOnTouchOutside(true);//点击外部Dialog消失
            //遍历控件id添加点击注册
            for(int id:listenedItem){
                findViewById(id).setOnClickListener(this);
            }
        }
        private OnCenterItemClickListener listener;
        public interface OnCenterItemClickListener {
            void OnCenterItemClick(MyDialog1 dialog, View view);
        }
        //很明显我们要在这里面写个接口,然后添加一个方法
        public void setOnCenterItemClickListener(OnCenterItemClickListener listener) {
            this.listener = listener;
        }
    
    
        @Override
        public void onClick(View v) {
            dismiss();//注意:我在这里加了这句话,表示只要按任何一个控件的id,弹窗都会消失,不管是确定还是取消。
            listener.OnCenterItemClick(this,v);
        }
    }
    

    3.主活动继承自己写的dialog的接口,实现点击方法

    //定义一个自己的dialog
     private MyDialog1 myDialog1;
    //实例化自定义的dialog
      myDialog1 = new MyDialog1(this,R.layout.dialog_2,new int[]{R.id.dialog_btn});
      //绑定点击事件
     myDialog1.setOnCenterItemClickListener((MyDialog1.OnCenterItemClickListener) this);
     //显示
      myDialog1.show();
     //调用点击函数
     @Override
        public void OnCenterItemClick(MyDialog1 dialog, View view) {
            switch (view.getId()){
                case R.id.dialog_btn:
                    Toast.makeText(getApplicationContext(),"点击了",Toast.LENGTH_SHORT).show();
                    break;
                default:
                    break;
            }
    
        }  
    

    总结

    最近项目还是没进度哇哇哇,心塞塞,准备开始弄个安卓游戏项目,要学一大堆东西。
    https://github.com/sakurakid/DialogDemo这个的git地址,希望对别人有帮助 
     

    展开全文
  • android dialog总结Dialog整理.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 安卓Dialog对话框

    2020-12-07 16:13:39
    Dialog对话框常用对话框1普通对话框2单选对话框3多选对话框4时间对话框5日期对话框6进度条对话框7自定义对话框自定义类 自定义对话框 常用对话框 1普通对话框 2单选对话框 3多选对话框 4时间对话框 5日期对话框 6...
  • 自定义dialog.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 安卓dialog消失:dismiss、cancel、hide

    千次阅读 2018-07-22 20:45:27
    安卓dialog消失:dismiss、cancel、hide 在我们看来dismiss和cancel效果是一样的,但是从源码看在cancel中调用了dismiss,如果调用cancel的话就可以监听cancelListener了,dismiss可以在任何线程,并且销毁了dialog...
  • 项目通用Dialog.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • Custom-Dialog.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 安卓Dialog封装

    2017-01-12 17:13:07
    安卓项目中常用到对话框的显示,用来提示一些信息或者是需要输入信息接收的,因此进行了一次简单的封装,后续大家可以在次基础上进行扩展~~ package com.iven.app.view;import android.app.Dialog; import android....
  • 安卓自带的Diaalog有三种: - AlertDialog—-普通的提示对话框 - ProgressDialog–进度条对话 - DatePickerDialog/TimePickerDialog–日期对话框/时间对话框 所有的对话框,都是直接或间接继承自Dialog类,而...
  • 各种android弹出dialog效果以及各种dialog样式.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 安卓dialog主题

    2016-10-09 10:11:10
    最近在写一个dialog,发现默认背景黑色不透明占满屏幕,改了主题为透明之后就可以了
  • HerilyAlertDialog完全自定义的Dialog.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,006
精华内容 402
关键字:

安卓dialog