android 自定义Dialog,baseDialog,居中、底部对其,弹框设置背景透明、显示时隐藏系统导航栏,view的显示和添加,任意布局view;ProgressBar样式
1、自定义若使用百分比宽高percentHight、percenWidthdialog的xml的最高层布局的宽高必须是match_parent,要不然会不生效package com.jd.oa.joy.note.util; import android.app.Dialog; import android.content.Context; import android.os.Build; import android.os.Bundle; import android.view.Display; import android.view.Gravity; import android.view.View; import android.view.Window; import android.view.WindowManager; import com.jd.oa.joy.note.R; public abstract class BaseDialog extends Dialog { private int gravity-1; /** * * 若使用百分比宽高percentHight、percenWidthdialog 的xml的最高层布局的宽高必须是match_parent,要不然会不生效 * */ private double percentHight-1; private double percenWidth1; public BaseDialog(Context mContext) { super(mContext, R.style.MyDialog);//这里设置dialog的统一主题全屏、背景透明等 } public BaseDialog(Context mContext, int gravity,double percenWidth,double percentHight) { super(mContext, R.style.MyDialog);//这里设置dialog的统一主题全屏、背景透明等 this.gravitygravity; this.percenWidthpercenWidth; this.percentHight percentHight; } Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getLayoutId());//这行一定要写在前面 Window window this.getWindow(); if (gravity-1){ window.setGravity(Gravity.CENTER);//设置弹框对其方式 }else { window.setGravity(gravity);//设置弹框对其方式 } WindowManager.LayoutParams params window.getAttributes(); WindowManager windowManager window.getWindowManager(); Display display windowManager.getDefaultDisplay(); if (percentHight!-1){ //设置弹框的高为屏幕的一半宽是屏幕的宽 params.height (int)(display.getHeight()*percentHight); //设置宽度 }else { params.height WindowManager.LayoutParams.WRAP_CONTENT;//设置宽高模式 } if (percenWidth ! -1) { params.width (int)(display.getWidth() * percenWidth); } else { params.width WindowManager.LayoutParams.WRAP_CONTENT; } window.setAttributes(params); initView(); initData(); } protected abstract void initView(); protected abstract void initData(); protected abstract int getLayoutId(); public void setWidthPercent(double percent) { Window window this.getWindow(); WindowManager.LayoutParams params window.getAttributes(); WindowManager windowManager window.getWindowManager(); Display display windowManager.getDefaultDisplay(); params.width (int)(display.getWidth() * percent); window.setAttributes(params); } private void fullScreenImmersive(View view) { if (Build.VERSION.SDK_INT Build.VERSION_CODES.KITKAT) { int uiOptions View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN; view.setSystemUiVisibility(uiOptions); } } //-------------------------隐藏系统导航栏----------------------------------- Override public void show() { this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE); super.show(); fullScreenImmersive(getWindow().getDecorView()); this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE); } }2、R.style.MyDialog,在value文件夹下找到style或者themes将下述代码加进去style nameMyDialog parentandroid:style/Theme.NoTitleBar.Fullscreen !-- 是否有边框 -- item nameandroid:windowFramenull/item !--是否在悬浮Activity之上 -- item nameandroid:windowIsFloatingtrue/item !--标题 -- item nameandroid:windowNoTitletrue/item !--阴影 -- item nameandroid:windowIsTranslucentfalse/item!--半透明-- !-- 点外边可以消失 -- item nameandroid:windowCloseOnTouchOutsidefalse/item item nameandroid:windowBackgroundcolor/black_00_color/item!--背景透明--//这里的透明色值为#00000000 · /style3、重写package com.superx.boost.clean.dialog; import android.content.Context; import android.view.View; import android.widget.LinearLayout; import com.superx.boost.clean.R; /** * author jian11058 * time 2021/12/31 * desc : */ public class CancelUploadHintDialog extends BaseDialog { private OnConfirmListener onConfirmListener; public CancelUploadHintDialog(Context mContext) { super(mContext, Gravity.CENTER, 0.85, -1); } Override protected void initView() { TextView btnCancel findViewById(R.id.btn_cancel); TextView btnConfirm findViewById(R.id.btn_confirm); btnCancel.setOnClickListener(new View.OnClickListener() { Override public void onClick(View v) { dismiss(); } }); btnConfirm.setOnClickListener(new View.OnClickListener() { Override public void onClick(View v) { if (onConfirmListener ! null) { onConfirmListener.onConfirm(); } dismiss(); } }); } Override protected void initData() { // 初始化数据 } Override protected int getLayoutId() { return R.layout.dialog_cancel_upload_hint; } public void setOnConfirmListener(OnConfirmListener listener) { this.onConfirmListener listener; } public interface OnConfirmListener { void onConfirm(); } }view的添加与显示1、利用layout.addview(View); 2、利用activity中的addContentView videoView LayoutInflater.from(context).inflate(R.layout.view_video_play, null); FrameLayout.LayoutParams params new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); //设置顶部,左边布局 params.gravity Gravity.TOP | Gravity.LEFT; if (context instanceof Activity) { ((Activity) context).addContentView(videoView, params); } 可自定义任意view的布局然后进行管理隐藏或显示 progress样式ProgressBar android:idid/progress_bar android:layout_width40dp android:layout_height40dp android:layout_centerHorizontaltrue android:layout_marginTop20dp android:indeterminatefalse android:indeterminateDrawabledrawable/progress_bar_drawable_login_white / progress_bar_drawable_login_white在drawable文件夹下 ?xml version1.0 encodingutf-8? layer-list xmlns:androidhttp://schemas.android.com/apk/res/android item rotate android:drawablemipmap/login_loading_white android:fromDegrees0.0 android:toDegrees360.0 android:pivotX50.0% android:pivotY50.0% / /item /layer-list