先看个例子

activity

public class DemoActivity extends Activity  {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button bt = (Button) findViewById(R.id.bt);bt.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {newDialog();}});}private void newDialog() {Builder builder = new AlertDialog.Builder(this);AlertDialog dialog = builder.create();builder.setTitle("title");builder.setMessage("message");builder.setPositiveButton("", new  DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});builder.show();}}
2xml布局

    
一个最简单的例子,点击按钮就显示dialog。细心的同学会发现我里边有个没用的句子。
AlertDialog dialog = builder.create();
这句在例子中确实是没用,加上它是为了说明一下
我最后是用builer.show();此时显示的是builer设置的title等内容。如果是用的dialog.show();则显示dialog设置的内容。
后面在控制dismiss的时候也是一样,用哪个show,就用哪个dismiss。另外dialog是不能设置posivite和negative button的
上述步骤就可以显示基本的dialog了。如果你想让dialog换换样子,即使用自己的布局,还是使用例子中没用的这句

dialog.setView(view);

dialog.show();

这里的view就可以加载你自己定义的布局
还有个需要注意的是:当dialog获取焦点时,也就是dialog显示时,activity的back事件是捕获不到的

常见的捕获back的方法

1)重写onKeyDown或者onKeyUp方法

2)重写onBackPressed方法

3)重写dispatchKeyEvent方法

然而在有dialog弹出时,想捕捉back键的事件的话,上述三种办法都无法实现。因为上述方法是重写在activity里面的,也就是说当activity是当前焦点时,它可以捕捉到相应的back键事件,而有dialog弹出时,dialog获取了当前焦点,所以activity里面的方法无法获取到back键事件,此时有两种思路:

  1)设置dialog的setOnCancelListener监听:

selectDialog.setOnCancelListener(new OnCancelListener() {                @Override                public void onCancel(DialogInterface dialog) {                        Toast.makeText(getBaseContext(), "点击了back", Toast.LENGTH_SHORT).show();                }            });
2)设置dialog的setOnKeyListener并重写dispatchKeyEvent方法

selectDialog.setOnKeyListener(new OnKeyListener() {                  @Override                public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {                    if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0)                    {                        dialog.dismiss();                    }                    return false;                }            });  public boolean dispatchKeyEvent(KeyEvent event)    {             switch(event.getKeyCode())        {        case KeyEvent.KEYCODE_BACK:                       Toast.makeText(getBaseContext(), "点击了back", Toast.LENGTH_SHORT).show();            break;        default:            break;        }        return super.dispatchKeyEvent(event);    }

在Toast的地方就可以执行想要处理的事情



更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. 开源项目Universal Image Loader for Android(安卓)说明文档 (2)
  5. Android(安卓)HttpClient
  6. Android(安卓)休眠与唤醒
  7. android AsyncTask 使用方法
  8. Android一直震动源码
  9. Android(安卓)HttpClient

随机推荐

  1. Android搜索实时显示功能实现
  2. Android的Google官方设计指南(上)
  3. Android缓存处理
  4. Android(安卓)对于MVVM模式的理解
  5. Android真机测试 连接本地服务器
  6. [Android]如何做一个崩溃率少于千分之三
  7. android NDK开发整合opencv开发——环境
  8. 微信小程序AES加密与解密与android AES加
  9. Android删除UIM卡联系人
  10. Android开发过程中框架是如何搭建的呢