Dialog 去除边框 以及全设置全屏时隐藏状态栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_36838630/article/details/78541869

Dialog与PopupWindow都是可以弹窗的控件,有一些区别,本人喜欢用Dialog 可是用的时候发现有一些问题需要解决和总结一下,所以写了这个总结,方便下次自己使用。


Dialog 去除边框

Dialog有时候用的时候会四周出现边框,很难看,所以上网查了一下,总结出来:

先新建一个Style
<!--Dialog样式   没有四周边框-->
    <style name="ShareDialog"  parent="android:Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:background">@color/colorTransparent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:backgroundDimAmount">0.7</item>
    </style>

然后新建一个类继承Dialog
public class OBDPopDialog extends Dialog {

    public OBDPopDialog(@NonNull Context context) {
        super(context, R.style.ShareDialog);
    }

}

然后就和一般的Dialog用法一样了(下面代码附带让Dialog出现位置以及展示大小)
final OBDPopDialog dialog = new OBDPopDialog(mContext);
                View view_rd = LayoutInflater.from(mContext).inflate(R.layout.dialog_display_remove_display, null);
setPromptWin(dialog);
dialog.setContentView(view_rd);
                dialog.setCanceledOnTouchOutside(true);
                dialog.show();

里面的那个方法就是控制位置和大小的
private void setPromptWin(OBDPopDialog dia) {
        Window win = dia.getWindow();
        WindowManager.LayoutParams lp = win.getAttributes();
        win.setGravity(Gravity.LEFT | Gravity.TOP);
        lp.x = (int) (ScreenUtils.getScreenWidth(mContext) * 0.141333);
        lp.y = (int) (ScreenUtils.getScreenHeight(mContext) * 0.293663);
        win.setAttributes(lp);
    }


Dialog全屏时隐藏状态栏


用上述方法时,发现设置为全屏时上方一直有状态栏,,,所以我又上网查了一下,总结了之后现在发出来:
新建一个类  继承 Dialog
public class OBDDialogP extends Dialog {

    public OBDDialogP(@NonNull Context context) {
        super(context , R.style.kdialog);
        setCancelable(false);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        applyCompat();
    }

    private void applyCompat() {
        if (Build.VERSION.SDK_INT < 19) {
            return;
        }
        getWindow().setFlags(
                WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }


}


里面的Style 文件:
<!--Dialog 样式  四周没有边框 加 全屏时不会有隐藏标题栏-->
    <style name="kdialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">false</item>
        <item name="android:backgroundDimEnabled">false</item>
    </style>

调用的时候
 OBDDialogP dialog = new OBDDialogP(this);
                View viewDialog = LayoutInflater.from(this).inflate(R.layout.dialog_perfoemance_other, null);


                dialog.setContentView(viewDialog);
                dialog.setCanceledOnTouchOutside(false);
                dialog.show();
                setPromptWin(dialog);

自定义方法:
 private void setPromptWin(OBDDialogP dia) {
        WindowManager windowManager = getWindowManager();
        Display display = windowManager.getDefaultDisplay();
        WindowManager.LayoutParams lp = dia.getWindow().getAttributes();
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp.height = WindowManager.LayoutParams.MATCH_PARENT;
        dia.getWindow().setAttributes(lp);
    }



OK  大功告成
--------------------------------------------------------------------------------------------------------------------------------------
啥?为什么不整合成一个类?
啊,因为这个是实际项目的,我怕用了之后 , 之前的出现啥问题,我又不会怎么改

实际上就是懒,哦也,哈哈哈



阅读更多
换一批

没有更多推荐了,返回首页