今天在郭神的公众号看到的一篇技术文章。关于 dialog,之前也发表了几篇,但看到这个效果还是记录一下,方便今后使用。
Step 1. 添加 JitPack 仓库 在当前项目等根目录下的 build.gradle 文件中添加如下内容:
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
Step 2. 添加项目依赖
dependencies {
compile 'com.github.Othershe:NiceDialog:1.1.1'
}
Step 3. 配置、展示 dialog
NiceDialog.init()
.setLayoutId(R.layout.dialog) //设置 dialog 布局文件
.setConvertListener(new ViewConvertListener() { //进行相关 View 操作的回调
@Override
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() {
@Override
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()选择一个即可
package com.gyq.nicedialog;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.Toast;
import com.othershe.nicedialog.BaseNiceDialog;
import com.othershe.nicedialog.NiceDialog;
import com.othershe.nicedialog.ViewConvertListener;
import com.othershe.nicedialog.ViewHolder;
public class MainActivity extends AppCompatActivity {
@Override
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() {
@Override
public void convertView(ViewHolder viewHolder, BaseNiceDialog baseNiceDialog) {
//dialog 中 view 的点击事件
viewHolder.setOnClickListener(R.id.wechat, new View.OnClickListener() {
@Override
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() {
@Override
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() {
@Override
public void convertView(ViewHolder holder, final BaseNiceDialog dialog) {
final EditText editText = holder.getView(R.id.edit_input);
editText.post(new Runnable() {
@Override
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() {
@Override
public void convertView(ViewHolder holder, final BaseNiceDialog dialog) {
holder.setOnClickListener(R.id.close, new View.OnClickListener() {
@Override
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;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getArguments();
if (bundle == null) {
return;
}
type = bundle.getString("type");
}
@Override
public int intLayoutId() {
return R.layout.confirm_layout;
}
@Override
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() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
holder.setOnClickListener(R.id.ok, new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
}
}
}
这个 dialog 写的挺好的,项目地址:NiceDialog