一、简介
DialogFragment 是 Android3.0 引入的,也是官方推荐来创建对话框的,兼具 dialog 以及 Fragment 的特性。接下来在 DialogFragment 的基础上实现我们的 NiceDialog,我们实现的 dialog 要能够简单的使用,也要易扩展,同时支持 BottomDialog,让 dialog 的使用更方便。
项目地址:NiceDialog
二、效果图


三、基本用法
1. 添加 JitPack 仓库 在当前项目等根目录下的 build.gradle 文件中添加如下内容:
allprojects {
    repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}2. 添加项目依赖
dependencies {
        compile 'com.github.Othershe:NiceDialog:1.1.1'
}3. 配置、展示 dialog
NiceDialog.init()
          .setLayoutId(R.layout.dialog)     //设置 dialog 布局文件
          .setConvertListener(new ViewConvertListener() {     //进行相关 View 操作的回调
              
              public void convertView(ViewHolder holder, final BaseNiceDialog dialog) {
  //如果需要找布局中相应的控件;
  Button mBtnCancel =(Button)holder.getConvertView().findViewById(R.id.cancel);
//如果只需要控件的点击事件
viewHolder.setOnClickListener(R.id.cancel, new View.OnClickListener() {
                            
                            public void onClick(View view) {
                                dialog.dismiss();
                            }
                        });
              }
          })
          .setDimAmount(0.3f)     //调节灰色背景透明度[0-1],默认 0.5f
          .setShowBottom(true)     //是否在底部显示 dialog,默认flase
          .setMargin()     //dialog 左右两边到屏幕边缘的距离(单位:dp),默认0dp
          .setWidth()     //dialog 宽度(单位:dp),默认为屏幕宽度
          .setHeight()     //dialog 高度(单位:dp),默认为WRAP_CONTENT
          .setOutCancel(false)     //点击 dialog 外是否可取消,默认true
          .setAnimStyle(R.style.EnterExitAnimation)     //设置dialog进入、退出的动画style(底部显示的 dialog 有默认动画)
          .show(getSupportFragmentManager());     //显示dialog注意: setMargin()和setWidth()选择一个即可
4. 逻辑代码
public class MainActivity extends AppCompatActivity {
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void share(View view) {
        NiceDialog.init()
                .setLayoutId(R.layout.share_layout)   //设置dialog布局文件
                .setConvertListener(new ViewConvertListener() {
                    
                    public void convertView(ViewHolder viewHolder, BaseNiceDialog baseNiceDialog) {
                    //dialog 中 view 的点击事件
                        viewHolder.setOnClickListener(R.id.wechat, new View.OnClickListener() {
                            
                            public void onClick(View view) {
                                Toast.makeText(MainActivity.this,"进入微信中...",Toast.LENGTH_SHORT).show();
                            }
                        });
                    }
                })
                .setDimAmount(0.3f)
                .setShowBottom(true)
                .setOutCancel(true)
                .setAnimStyle(R.style.EnterExitAnimation)
                .show(getSupportFragmentManager());
    }
    public void setFriend(View view) {
        NiceDialog.init()
                .setLayoutId(R.layout.friend_set_layout)
                .setConvertListener(new ViewConvertListener() {
                    
                    public void convertView(ViewHolder holder, final BaseNiceDialog dialog) {
                    }
                })
                .setShowBottom(true)
                .setHeight(310)
                .show(getSupportFragmentManager());
    }
    public void commit(View view) {
        NiceDialog.init()
                .setLayoutId(R.layout.commit_layout)
                .setConvertListener(new ViewConvertListener() {
                    
                    public void convertView(ViewHolder holder, final BaseNiceDialog dialog) {
                        final EditText editText = holder.getView(R.id.edit_input);
                        editText.post(new Runnable() {
                            
                            public void run() {
                                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                                imm.showSoftInput(editText, 0);
                            }
                        });
                    }
                })
                .setShowBottom(true)
                .show(getSupportFragmentManager());
    }
    public void openRed(View view) {
        NiceDialog.init()
                .setLayoutId(R.layout.ad_layout)
                .setConvertListener(new ViewConvertListener() {
                    
                    public void convertView(ViewHolder holder, final BaseNiceDialog dialog) {
                        holder.setOnClickListener(R.id.close, new View.OnClickListener() {
                            
                            public void onClick(View v) {
                                dialog.dismiss();
                            }
                        });
                    }
                })
                .setWidth(210)
                .setOutCancel(false)
                .setAnimStyle(R.style.EnterExitAnimation)
                .show(getSupportFragmentManager());
    }
    public void load(View view) {
        NiceDialog.init()
                .setLayoutId(R.layout.loading_layout)
                .setWidth(100)
                .setHeight(100)
                .setDimAmount(0)
                .show(getSupportFragmentManager());
    }
    public void sure(View view) {
        ConfirmDialog.newInstance("1")
                .setMargin(60)
                .setOutCancel(false)
                .show(getSupportFragmentManager());
    }
    public void sure02(View view) {
        ConfirmDialog.newInstance("2")
                .setMargin(60)
                .setOutCancel(false)
                .show(getSupportFragmentManager());
    }
    public static class ConfirmDialog extends BaseNiceDialog {
        private String type;
        public static ConfirmDialog newInstance(String type) {
            Bundle bundle = new Bundle();
            bundle.putString("type", type);
            ConfirmDialog dialog = new ConfirmDialog();
            dialog.setArguments(bundle);
            return dialog;
        }
        
        public void onCreate( Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Bundle bundle = getArguments();
            if (bundle == null) {
                return;
            }
            type = bundle.getString("type");
        }
        
        public int intLayoutId() {
            return R.layout.confirm_layout;
        }
        
        public void convertView(ViewHolder holder, final BaseNiceDialog dialog) {
            if ("1".equals(type)) {
                holder.setText(R.id.title, "提示");
                holder.setText(R.id.message, "您已支付成功!");
            } else if ("2".equals(type)) {
                holder.setText(R.id.title, "警告");
                holder.setText(R.id.message, "您的账号已被冻结!");
            }
            holder.setOnClickListener(R.id.cancel, new View.OnClickListener() {
                
                public void onClick(View v) {
                    dialog.dismiss();
                }
            });
            holder.setOnClickListener(R.id.ok, new View.OnClickListener() {
                
                public void onClick(View v) {
                    dialog.dismiss();
                }
            });
        }
    }
}                
                










