一个全屏dialog的实现主要就是以下几步:
自定义dialog主题
<style name="dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item> <!-- 有无边框 -->
<item name="android:windowIsFloating">true</item> <!-- 是否浮现在activity之上 -->
<item name="android:windowIsTranslucent">true</item> <!-- 是否透明 -->
<item name="android:windowBackground">@color/translucent_background</item> <!-- 背景透明 -->
<item name="android:backgroundDimEnabled">true</item> <!-- 模糊 -->
<item name="android:windowNoTitle">true</item><!--无标题 -->
<item name="android:windowFullscreen">true</item>
</style>
构造方法里传入主题
public FullScreenDialog(Context context) {
super(context,R.style.dialog);
rootView = LayoutInflater.from(context).inflate(R.layout.fullsvreen_dialog,null,false);
mTitleClose = rootView.findViewById(R.id.title_close_text);
mTitleClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
}
});
mTitleMidle = rootView.findViewById(R.id.midTitle);
}
传入自定义布局
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(rootView);
setCancelable(true);
setCanceledOnTouchOutside(false);
}
设置布局大小
public void showDialog(){
if(this.isShowing())
return;
Window window = this.getWindow();
window.setGravity(Gravity.CENTER);
window.setWindowAnimations(R.style.sty_dialog);
this.show();
WindowManager.LayoutParams params = window.getAttributes();
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = WindowManager.LayoutParams.MATCH_PARENT;
window.setAttributes(params);
window.getDecorView().setPadding(0,0,0,0);
}
调用dialog
FullScreenDialog fsd = new FullScreenDialog(MainActivity.this);
fsd.showDialog();