可以自定义布局的对话框---CommonDialog

一直以来Android中弹出对话框的布局都是个问题,自带的布局基本无法满足开发使用,一个项目中可能会弹出很多对话框,而且这些对话框的布局都不一样,每次都去自定义一个dialog类有很麻烦,所以这里分享一个我在自己项目中写的可以自定义布局的通用的dialog,每次只需要写一个布局就可以了,不需要每次都去自定义类,用上去感觉和popupwindow很相似,但又不需要自己让背景变半透明,很好用。废话不多说了上代码:

第一步 、自定义的类:
package com.ytd.finding.widget;

import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.ytd.finding.R;


public class CommonDialog extends Dialog {

public CommonDialog(Context context) {
super(context);
}

public CommonDialog(Context context, int theme) {
super(context, theme);
}

public static abstract class Builder {
private Context context;
final CommonDialog dialog;

public Builder(Context context) {
this.context = context;
dialog = new CommonDialog(context, R.style.Dialog);
}
public View getView(int layoutId) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(layoutId, null);
dialog.addContentView(layout, new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
return layout;
}

public CommonDialog build(int layoutId){
onViewCreated(getView(layoutId),dialog);
return dialog;
}

abstract public void onViewCreated(View view,Dialog dialog);

}
}
第二步、定义一个style: //这个style一定不要忘了
如下:


第三步、在实战中的使用
private void showDialog() {
CommonDialog dialog = new CommonDialog.Builder(this) {

@Override
public void onViewCreated(View view, Dialog dialog) {
//在这里可以初始化布局中的控件,以及点击事件等,所需要在对话框中的操作。。。
// findViewById().....
}
}.build(R.layout.dialog_waiting);	//这里是自定义的布局文件资源

dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
dialog.show();
}


第四步、写定义的布局文件

这个布局文件的最外层是一个FragmeLayout 背景色不做任何处理
对话框弹出的样式是 LinearLayout布局的样式和内容



<!-- 父布局不能忽略-->

<!-- 这个布局才是弹出来的布局-->












你可能感兴趣的:(andriod)