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

xiaoxiao2021-02-28  76

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

最新回复(0)