AlertDialog复习使用

226 阅读2分钟
原文链接: songsongtao.github.io

提示框,适合简单的提示和操作

没有生命周期

创建

采用support包下的类创建,保证都是最新的样式

字体,按钮等效果都是主题默认的样式

android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(this);

标题

builder.setTitle("标题");

内容

注意:当有了内容后设置单选或多选列表不起作用

builder.setMessage("内容");

图标

在标题左侧

builder.setIcon(R.mipmap.ic_launcher);

显示隐藏

builder.show();
//获得dialog对象
AlertDialog alertDialog = builder.create();
alertDialog.dismiss();
//可以点击空白,或按返回键消失
builder.setCancelable();
//取消监听
builder.setOnCancelListener();
//隐藏监听
builder.setOnDismissListener();

按钮

默认点击按钮后,弹窗隐藏

确认按钮

builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
           @Override
           public void onClick(DialogInterface dialogInterface, int i) {
           }
       });

取消按钮

builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
          @Override
          public void onClick(DialogInterface dialogInterface, int i) {
            
          }
      });

其它按钮

在确认和取消之间

builder.setNegativeButton("其它", new DialogInterface.OnClickListener() {
           @Override
           public void onClick(DialogInterface dialogInterface, int i) {
           }
       });

列表

普通列表

builder.setItems(new String[]{"1", "2", "3"}, new DialogInterface.OnClickListener() {
           @Override
           public void onClick(DialogInterface dialogInterface, int i) {
               Toast.makeText(MainActivity.this, "hello" + i, Toast.LENGTH_SHORT).show();
           }
       });

单选列表

//(数据项目,被选中项,点击)
//被选中项设置为-1,将默认不选择任何条目
builder.setSingleChoiceItems(new String[]{"1", "2", "3"}, 0, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "hello" + i, Toast.LENGTH_SHORT).show();
            }
        });

多选列表

//(数据项目,被选中项目,点击)
//被选中列表可为null
builder.setMultiChoiceItems(new String[]{"1", "2", "3"}, new boolean[]{true, false, false}, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i, boolean b) {
            }
        });

自定义列表

builder.setAdapter(adapter,listener);

自定义

添加view

//在message下设置一个布局
builder.setView(view,padding1,padding2,padding3,padding4);

样式

<style name="AppTheme.Dialog.Alert" parent="Theme.AppCompat.Light.Dialog.Alert"></style>
<!--自定义列表弹出的activity的样式   -->
<style name="FloateDialogBottom" type="text/css">
    <!--动画设置-->
    <item name="android:windowAnimationStyle">@style/AnimBottom</item>
    <!--这个不设置的话,可能会出现边框黑线-->
    <item name="android:windowContentOverlay">@null</item>
    <!--Dialog的windowFrame框为无-->
    <item name="android:windowFrame">@null</item>
    <!-- 是否浮现在activity之上 -->
    <item name="android:windowIsFloating">true</item>
    <!--是否半透明-->
    <item name="android:windowIsTranslucent">true</item>
    <!-- 无标题 -->
    <item name="android:windowNoTitle">true</item>
    <!-- 背景颜色   @android:color/transparent 透明-->
    <item name="android:windowBackground">@android:color/background_light</item>
    <!-- 模糊 -->
    <item name="android:backgroundDimEnabled">true</item>
</style>

宽度和重心

Window win = dialog.getWindow();
//底部
      win.setGravity(Gravity.BOTTOM);
      win.getDecorView().setPadding(0, 0, 0, 0);
      WindowManager.LayoutParams lp = win.getAttributes();
//宽度填满
      lp.width = WindowManager.LayoutParams.MATCH_PARENT;
      lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
      win.setAttributes(lp);