• 使用设置自定义对话框的大小,位置,样式以及设置在安卓桌面上弹出对话框


    第一步:创建对话框

    MyDialog mydlg=new MyDialog(context);

    第二步:获取对话框的window实例,通过window实例来控制对话框出现的位置,大小和弹出时候的场景

    Window dlgwindow=mydlg.getWindow();

    设置对话框最终显示位置

    dlgWindow.setGravity(Gravity.TOP);

    参数可以是Gravity.TOP(顶部),Gravity.BUTTON(底部),Gravity.LEFT(左边),Gravity.RIGHT(右边),Gravity.CENTER(居中)以及它们的组合

    设置对话框大小

    通过获取屏幕的大小,按照比例的方法设置比较便捷些

    首先获得WindowManager实例

    WindowManager m = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 

    Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用

    WindowManager.LayoutParams p = dlgWindow.getAttributes(); // 获取对话框当前的参数值

    p.height = (int) (d.getHeight() * 0.5); // 高度设置为屏幕的0.5

    p.width = (int) (d.getWidth() * 1); // 宽度设置为整个屏幕宽度

    p.alpha = 0.5f; //设置对话框的透明度

    dlgWindow.setAttributes(p);//

    设置对话框在桌面上弹出

    mydlg.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);//这里设置的可以在桌面中显示对话框

    实现这一步还需要获取权限

     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

    设置window的样式;

    通过style文件来设置对话框的样式

    以下是一些常用的标签

     <item name="android:windowFullscreen">true</item>  <!--填充屏幕-->

    <item name="android:windowFrame">@null</item> :Dialog的windowFrame框为无

    <item name="android:windowIsFloating">true</item>:是否浮现在activity之上

    <item name="android:windowIsTranslucent">false</item>:是否半透明

    <item name="android:windowNoTitle">true</item>:是否显示title

    <item name="android:windowBackground">@drawable/dia_bg</item>:设置dialog的背景

    <item name="android:windowBackground">@drawable/selector_dialog_bg</item><!--对话框背景透明-->

    <item name="android:backgroundDimEnabled">false</item>: 背景是否模糊显示

     <item name="android:windowAnimationStyle">@style/xxx_ani</item>:设置对话框弹出和消失的动画

    其它:

    //设置点击对话框外部,可以关闭对话框

    mydlg.setCanceledOnTouchOutside(true);

    //动态设置动画

    mydlg.getWindow().setWindowAnimations(R.style.dialog_ani);

    PS:对于setType为WindowManager.LayoutParams.TYPE_SYSTEM_ALERT

    即系统窗口,是不支持通过getWindow()直接设置动画的,不过,天无绝人之路,可以在对话框里面的view设置动画

    eg:

    Animation ani=AnimationUtils.loadAnimation(getContext(), R.anim.xxx_anim);

    view.setAnimation(ani);

    //如何给对话框设置样式

    如果是通过继承Dialog来自定义对话框,通过构造函数设置

    eg:super(context,R.style.myDialog);

  • 相关阅读:
    CentOS7 时间设置与网络同步
    CentOS7 系统升级,删除centos7开机界面多余选,升级至最新的内核
    Docker 编排工具Rancher 2.0
    Docker 编排工具Rancher 1.6.18
    通过WSL在Windows下安装子Linux系统
    Docker 使用Dockerfile构建redis镜像
    初探PHP多进程
    nginx转发
    mime类型
    socket php
  • 原文地址:https://www.cnblogs.com/Alex80/p/12055469.html
Copyright © 2020-2023  润新知