88 lines
2.6 KiB
Java
88 lines
2.6 KiB
Java
package com.sw.dualscreen.view;
|
|
|
|
import android.app.Dialog;
|
|
import android.content.Context;
|
|
import android.content.res.Resources;
|
|
import android.os.Build;
|
|
import android.util.DisplayMetrics;
|
|
import android.view.Gravity;
|
|
import android.view.View;
|
|
import android.view.Window;
|
|
import android.view.WindowManager;
|
|
|
|
public class CustomDialog extends Dialog {
|
|
|
|
|
|
/**
|
|
* 宽高由布局文件中指定(但是最底层的宽度无效,可以多嵌套一层解决)
|
|
*/
|
|
public CustomDialog(Context context, View layout, int style) {
|
|
|
|
super(context, style);
|
|
|
|
setContentView(layout);
|
|
|
|
Window window = getWindow();
|
|
|
|
WindowManager.LayoutParams params = window.getAttributes();
|
|
|
|
params.gravity = Gravity.CENTER;
|
|
|
|
window.setAttributes(params);
|
|
|
|
}
|
|
|
|
/**
|
|
* 宽高由该方法的参数设置
|
|
*/
|
|
public CustomDialog(Context context, int width, int height, View layout,
|
|
int style) {
|
|
super(context, style);
|
|
// 设置内容
|
|
setContentView(layout);
|
|
// 设置窗口属性
|
|
Window window = getWindow();
|
|
WindowManager.LayoutParams params = window.getAttributes();
|
|
// 设置宽度、高度、密度、对齐方式
|
|
float density = getDensity(context);
|
|
params.width = (int) (width * density);
|
|
params.height = (int) (height * density);
|
|
params.gravity = Gravity.CENTER;
|
|
window.setAttributes(params);
|
|
|
|
}
|
|
|
|
/**
|
|
* 获取显示密度
|
|
*
|
|
* @param context
|
|
* @return
|
|
*/
|
|
public float getDensity(Context context) {
|
|
Resources res = context.getResources();
|
|
DisplayMetrics dm = res.getDisplayMetrics();
|
|
return dm.density;
|
|
}
|
|
|
|
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);
|
|
}
|
|
} |