关于提示对话框的总结

---恢复内容开始---

安卓的对话框有两种:PopupWindow和AlterDialog

它们的不同点在于:AlterDialog的位置固定(提示对话框:ps暂且自己先这样理解),而PopupWindow的位置可以随意(逐渐显示出来的窗口 :ps也是按照自己理解来吧)

AlertDialog需要建立一个创建者AlertDialog.Builder bulider

AlertDialog.Builder bulider=new AlertDialog.Builder(AlertActivity.this);

由bulider对象去完成AlterDialog的某些功能,例如:
bulider.setTitle("提示");//提示对话框的标题bulider.setIcon(R.mipmap.ic_launcher);//所显示的图片bulider.setMessage("你确定这样做吗?");//提示信息

并且要设置与用户交互的接口的方法,供用户操作.实现方法如下:
bulider.setPositiveButton("确定", new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int i) {        Toast.makeText(getBaseContext(), "确定", Toast.LENGTH_SHORT).show();    }});bulider.setNegativeButton("取消", new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {        Toast.makeText(getBaseContext(), "取消", Toast.LENGTH_SHORT).show();    }});
AlterDialog还提供了单选对话框和多选对话框(ps:个人觉得这两种对话框还蛮好玩的,具体好玩的原因我也不知道......嘻嘻)单选对话框:
@Override    public void onClick(View v) {        AlertDialog.Builder bulider=new AlertDialog.Builder(AlertActivity.this);        bulider.setCancelable(false);        final String[]items={"北京","上海","烟台"};        bulider.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                Toast.makeText(getBaseContext(), items[which].toString(), Toast.LENGTH_SHORT).show();                dialog.dismiss();

            }        });        AlertDialog alertDialog = bulider.create();        alertDialog.show();    }});
在这里我遇到了几个问题:1.bulider.setCancelable(false);//不知道这句话是干什么用的 T_T.2.自己写代码的时候,没有注意到items 要设置为final 常量3.dialog,dismiss();//作用是取消对话框4.在方法的最后要记得创建bulider :bulider.create();

多选对话框:
bt3.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        AlertDialog.Builder bulider=new AlertDialog.Builder(AlertActivity.this);        bulider.setCancelable(false);        bulider.setTitle("选择你所在的城市");        final String[] items={"北京","上海","烟台"};        final boolean[] boo={false,false,false};//为什么要设置三个布尔值        bulider.setMultiChoiceItems(items, null, new DialogInterface.OnMultiChoiceClickListener() {            @Override            public void onClick(DialogInterface dialog, int which, boolean isChecked) {                if (isChecked) {                    Toast.makeText(getBaseContext(), items[which].toString(), Toast.LENGTH_SHORT).show();                    boo[which]=true;                }else{                    boo[which]=false;                }            }        });        bulider.setPositiveButton("确定", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                StringBuffer sf = new StringBuffer();                for (int i = 0; i < items.length; i++) {                    if (boo[i] == true)                        sf.append(items[i] + "");                }                Toast.makeText(getBaseContext(), sf.toString(), Toast.LENGTH_SHORT).show();                dialog.dismiss();            }

        });        AlertDialog alertDialog=bulider.create();        alertDialog.show();    }});
多选对话框和单选对话框总体结构还是差不多的,只不过多了几种选择,多了checkBox选项

遇到的问题:1.final boolean[] boo={false,false,false};//为什么要设置三个布尔值答:这应该是设置的默认状态下,没有选中的城市。但是后面的实现方法中有:bulider.setMultiChoiceItems(items, null, new DialogInterface.OnMultiChoiceClickListener()传了一个null,既然没有传参数,为什么还要设置默认状态下没有选中的城市呢?

关于getLayoutinflater加载器自己的理解: 
bt4.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        View view=getLayoutInflater().inflate(R.layout.toast_layout,null);            ImageView iv = (ImageView) view.findViewById(R.id.toast_iv);            iv.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    Toast.makeText(AlertActivity.this, "点击图片", Toast.LENGTH_SHORT).show();            }        });        AlertDialog.Builder bulider=new  AlertDialog.Builder(AlertActivity.this);        bulider.setView(view);        AlertDialog alertDialog=bulider.create();        alertDialog.show();    }});

纯属个人菜鸟式的理解(错了的地方还希望能指出):Layoutinflater它的作用给我的感觉有点类似于findViewByid().不同点是layoutinflater是用来找res/layout/下的xml文件,并且实现但是在xml文件中并找不到,有点抽象化。上面程序中的view 就是通过layoutinflater加载进内存空间,并不再xml文件。而findViewByid是找xml布局文件下的具体控件(例如button,textview之类的)Layoutinflater它的具体作用:1.对于一个没有被写入xml文件,但是却想要被载入,或者说想要拿到并使用他的界面,就需要用到layoutinflater.inflater();方法了2.对于一个被写入xml文件,想要拿到并使用它的布局界面,可以使用findViewByid()方法来获取其中的布局控件

PopupWindow:
@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_pop_window);    bt1=(Button)findViewById(R.id.bt1);    View v=getLayoutInflater().inflate(R.layout.toast_layout,null);    final PopupWindow pw=new PopupWindow(v);    pw.setFocusable(true);//设置焦点的状态    ColorDrawable cd=new ColorDrawable();    pw.setBackgroundDrawable(cd);    pw.setAnimationStyle(R.style.pop);//设置动画的样式    bt1.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View view) {            pw.setWidth(view.getWidth());            int height=getResources().getDisplayMetrics().heightPixels/3;            pw.setHeight(height);            pw.showAsDropDown(view, 0, 0);//设置PopWindow显示的位置位于View的下边,X Y表示坐标偏移量            pw.showAtLocation(view, Gravity.TOP | Gravity.RIGHT, 0, 170);//展示的位置

        }    });

}
注意:1.pw.setFocusable(false)时,说明PopupWindow不能获得焦点,即使设置了背景不为空也不能点击外面消失,只能由dismiss()消失。但是外面的View事件还是可以触发,back键也可以顺利dismiss掉。当设置为pw.setFocusable(true)时,背景不能为空,点击外面和Back键才会消失 

PopupWindow总结如下:1.为PopupWindow的view布局View v=getLayoutInflater().inflate(R.layout.toast_layout,null);2.显示位置,要用到showAsDropDown方法3.进出场动画 要用到setAnimationStyle方法4.消失 用dismiss()?

---恢复内容结束---

时间: 07-31

关于提示对话框的总结的相关文章

WinForm MessageBox 提示对话框

public class MessageUtil { /// <summary> /// 显示一般的提示信息 /// </summary> /// <param name="message">提示信息</param> public static DialogResult ShowTips(string message) { return MessageBox.Show(message, "提示信息",MessageBo

简单封装MessageBox提示对话框

namespace DMS.Common { public class MsgHelper { public static DialogResult ShowErrorMsgBox(string error) { return MessageBox.Show(error, "错误", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } public static DialogResult ShowInformationMsgBox(str

ios警告与提示对话框

进行iOS开发过程中,不可避免的使用到各种提醒,来提醒用户当前操作,或是为了警告,或是为了数据缓冲. 本文介绍了使用 UIAlertController和UIAlertAction两个类,完成三种状态的提醒. 这里首先使用UIAlertController创建一个提示对话框,按照工厂方法即可快速创建,参数UIAlertControllerStyle只有一种样式:UIAlertControllerStyleAlert. 填写完提示的标题和内容后,就可以使用UIAlertAction创建一个具体的按

Ext信息提示对话框

Ext.window.MessageBox是一个工具类,他继承自Ext.window.Windoe对象,用来生成各种风格的信息提示对话框,其实例对象可以通过Ext.MessageBox或Ext.Msg进行访问,使用Ext.MessageBox和使用Ext.Msg有相同的效果,而后者提供了更简短的调用方式.为了描述方便后边我们将使用Ext.MessageBox代表Ext.window.MessageBox实例对象. /** **Ext.MessageBox和Ext.Msg只是引用了Ext.wind

自动更新--下载apk以及提示对话框的实现(3)

下载apk以及提示对话框的实现 一.步骤: 1. 确定有可以更新的版本,对话框提醒用户是否进行更新. 2. 选择更新的话,显示下载对话框并且进行下载,否则关闭提示更新对话框. 3. Apk下载完成后,安装apk. 二.具体细节: 1. 提示用户更新的时候,实现必须更新的方法如下:显示的对话框只显示更新按钮,也就是只能选择更新. 2. 下载的时候,下载对话框的页面显示一个进度条来显示下载进度. 3. 下载的时候,启动一个子线程来进行下载. 4. 下载的时候需要来源路径和下载后保存的路径. 5. 下

AlertDialog.Builder提示对话框

1 package zyf.EX_Ctrl_3_B; 2 import android.app.Activity; 3 import android.app.AlertDialog; 4 import android.os.Bundle; 5 public class EX_Ctrl_3_B extends Activity { 6 /** Called when the activity is first created. */ 7 @Override 8 public void onCrea

java基础--提示对话框的使用

java基础--提示对话框的使用 2019-03-17-00:35:50-----云林原创 一.显示信息对话框:使用“JOptionPane.showMessageDialog”显示:   图标 对话框类型 语法 显示错误类型对话框 showMessageDialog(null,"这是内容,显示错误","标题",JOptionPane.ERROR_MESSAGE); 传达信息类型对话框 showMessageDialog(null, "这里是传达信息的信息

android中提示&amp;对话框----AlertDialog

AlertDialog(对话框) 一.对话框的基本使用流程 step1:创建AlertDialog.Buider; step2:调用setIcon()设置图标,setTitle()或者setCustomerTitle设置标题 step3:设置对话框的内容setMessage()还有其他方式: step4:setPosition/Negative/NaturalButton设置:确定.取消.中立 step5:调用create()方法创建这个对象,在调用show()方法将对话框显示出来 二.几种常用

cocos2dx 安卓退出提示对话框

很多游戏在按返回键退出的时候都会提示“是否要退出游戏?”,然后有“确定”和“返回”的两个按钮,一般来说, 使用安卓底层对话框是最好的选择,可以屏蔽屏幕的其他触摸事件. 使用eclipse打开cocos项目,在org.cocos2dx.lib包下,有Cocos2dxGLSurfaceView.java类,里面有一个 onKeyDown函数来响应键盘事件,在KeyEvent.KEYCODE_BACK下,加入一下代码实现对话框弹出: AlertDialog.Builder builder = new