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>
转载请注明原文地址: https://www.6miu.com/read-48548.html