自定义普通diaolog,链式调用,适用于没有交互(用户输入),支持自定义布局,给控件设置监听事件,给TextView设置文本内容,获取控件等
public class CommonDialog {
private Builder builder;
public CommonDialog(Builder builder) {
this.builder = builder;
}
public void show(){
builder.show();
}
public static class Builder extends Dialog implements View.OnClickListener {
private List<Integer> viewIds;//需要设置内容的TextView
private List<CharSequence> viewValues;//设置的内容
private Integer gravity;
private OnAllItemClickListener listener;
private int[] listenItem;//点击事件监听的控件集合
private void showDialog(){
show();
}
public Builder(Context context,@LayoutRes int resId) {
super(context);
setContentView(resId);
initData();
}
private void initData() {
viewIds = new ArrayList<>();
viewValues = new ArrayList<>();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Window window = getWindow();
if (window != null) {
window.setBackgroundDrawableResource(android.R.color.transparent);
gravity = gravity == null ? Gravity.CENTER : gravity;
WindowManager.LayoutParams params = window.getAttributes();
params.gravity = gravity;
window.setAttributes(params);
}
for (int i = 0; i < listenItem.length; i++) {
//控件设置监听事件
findViewById(listenItem[i]).setOnClickListener(this);
}
//循环设TextView置文本
for (int i = 0; i < viewIds.size(); i++) {
TextView view = findViewById(viewIds.get(i));
view.setText(viewValues.get(i));
}
}
public Builder setGravity(Integer gravity){
this.gravity = gravity;
return this;
}
public Builder setListenItem(int[] listenItem){
this.listenItem = listenItem;
return this;
}
public Builder setListener(OnAllItemClickListener listener){
this.listener = listener;
return this;
}
/**
* 给TextView设置文本内容
* @param viewId TextView的ID
* @param value 需要设置的值
*/
public Builder setText(@IdRes int viewId, CharSequence value){
viewIds.add(viewId);
viewValues.add(value);
return this;
}
@Override
public void onClick(View v) {
if (listener != null){
listener.handleClick(this,v);
}
}
public interface OnAllItemClickListener{
void handleClick(Builder builder,View view);
}
public CommonDialog build(){
return new CommonDialog(this);
}
}
}