高仿App--元贝驾考(二)Dialog工具类

来源:互联网 发布:php服务器配置 编辑:程序博客网 时间:2024/05/28 23:21
public class BaseDialog extends Dialog{    private Context context;    private Window dialogWindow;    private WindowManager.LayoutParams dialogLayoutParams;    public BaseDialog(@NonNull Context context){        super(context);        this.context = context;        init();    }    public BaseDialog(@NonNull Context context, @StyleRes int themeResId) {        super(context, themeResId);        this.context = context;        init();    }    private void init(){        dialogWindow = this.getWindow();        dialogLayoutParams = dialogWindow.getAttributes();        setCanceledOnTouchOutside(true);//设置点击Dialog外部任意区域关闭Dialog    }    public void setGravity(int gravity){        dialogWindow.setGravity(gravity);    }    public Window getDialogWindow(){        return dialogWindow;    }    public WindowManager.LayoutParams getDialogLayoutParams(){        return dialogLayoutParams;    }}
/** * dialog工具类 */public class DialogUtils {    private Context context;    private BaseDialog baseDialog;    private WindowManager.LayoutParams layoutParams;    public DialogUtils(Context context){        this.context = context;        baseDialog = new BaseDialog(context, R.style.NoTitleDialog);        layoutParams = baseDialog.getDialogLayoutParams();    }    public DialogUtils setContentView(View view){        baseDialog.setContentView(view);        layoutParams = baseDialog.getDialogLayoutParams();        layoutParams.height = LinearLayout.LayoutParams.WRAP_CONTENT;        layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT;        baseDialog.getDialogWindow().setAttributes(layoutParams);        return this;    }    public DialogUtils setContentViewSize(double width, double height){        if(width != 0){            layoutParams.width = (int) width;        }        if(height != 0){            layoutParams.height = (int) height;        }        baseDialog.getDialogWindow().setAttributes(layoutParams);        return this;    }
/**
*  为Dialog设置显示位置的时候为什么要先设置其显示位置为左上角呢?
*  因为diaolog的默认显示位置为屏幕的正中央(center),而我们并不知道其当前的XY,所以XY点还是
*  从屏幕的左上角开始计算比较好
*/
    public DialogUtils setXY(int x, int y){        layoutParams.gravity = Gravity.LEFT | Gravity.TOP;        layoutParams.x = x;        layoutParams.y = y;        baseDialog.getDialogWindow().setAttributes(layoutParams);        return this;    }    public DialogUtils setGravity(int gravity){        baseDialog.setGravity(gravity);        return this;    }    public void show(){        baseDialog.show();    }    public BaseDialog getBaseDialog(){        return baseDialog;    }}

调用实例
    private View tipExitView;    private TextView tipExitCancelTv;    private TextView tipExitOkTv;    private DialogUtils dialogUtils;    @Override    public void onBackPressed() {//        super.onBackPressed();        tipExitView = View.inflate(this,R.layout.view_back_tip,null);        tipExitCancelTv = (TextView) tipExitView.findViewById(R.id.dialog_exitTip_cancel);        tipExitOkTv = (TextView) tipExitView.findViewById(R.id.dialog_exitTip_ok);        tipExitCancelTv.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                dialogUtils.getBaseDialog().cancel();            }        });        tipExitOkTv.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                System.exit(0);            }        });        dialogUtils = new DialogUtils(this);        dialogUtils.show();        dialogUtils.setContentView(tipExitView);        dialogUtils.setContentViewSize(BaseApplication.WINDOW_WIDTH * 0.8,0);    }

下面是两种常用Style,一种是透明,一种半透明
<!--无标题透明dialog--><style name="NoTitleTransparentDialog">    <item name="android:windowTitleStyle">@null</item>    <item name="android:windowIsTranslucent">true</item>    <item name="android:windowBackground">@android:color/transparent</item></style><!--无标题不透明--><style name="NoTitleDialog">    <item name="android:windowTitleStyle">@null</item>    <item name="android:windowIsTranslucent">true</item>    <item name="android:windowBackground">@android:color/transparent</item>    <item name="android:windowIsFloating">true</item></style>

原创粉丝点击