public class Main2Activity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main2);        Dialog dialog = new Dialog(this);        // setContentView可以设置为一个View也可以简单地指定资源ID        // LayoutInflater        // li=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);        // View v=li.inflate(R.layout.dialog_layout, null);        // dialog.setContentView(v);        dialog.setContentView(R.layout.dialog_layout);        dialog.setTitle("Custom Dialog");        /*         * 获取圣弹框的窗口对象及参数对象以修改对话框的布局设置,         * 可以直接调用getWindow(),表示获得这个Activity的Window         * 对象,这样这可以以同样的方式改变这个Activity的属性.         */        Window dialogWindow = dialog.getWindow();        WindowManager.LayoutParams lp = dialogWindow.getAttributes();        dialogWindow.setGravity(Gravity.LEFT | Gravity.TOP);        /*         * lp.x与lp.y表示相对于原始位置的偏移.         * 当参数值包含Gravity.LEFT时,对话框出现在左边,所以lp.x就表示相对左边的偏移,负值忽略.         * 当参数值包含Gravity.RIGHT时,对话框出现在右边,所以lp.x就表示相对右边的偏移,负值忽略.         * 当参数值包含Gravity.TOP时,对话框出现在上边,所以lp.y就表示相对上边的偏移,负值忽略.         * 当参数值包含Gravity.BOTTOM时,对话框出现在下边,所以lp.y就表示相对下边的偏移,负值忽略.         * 当参数值包含Gravity.CENTER_HORIZONTAL时         * ,对话框水平居中,所以lp.x就表示在水平居中的位置移动lp.x像素,正值向右移动,负值向左移动.         * 当参数值包含Gravity.CENTER_VERTICAL时         * ,对话框垂直居中,所以lp.y就表示在垂直居中的位置移动lp.y像素,正值向右移动,负值向左移动.         * gravity的默认值为Gravity.CENTER,即Gravity.CENTER_HORIZONTAL |         * Gravity.CENTER_VERTICAL.         *         * 本来setGravity的参数值为Gravity.LEFT | Gravity.TOP时对话框应出现在程序的左上角,但在         * 我手机上测试时发现距左边与上边都有一小段距离,而且垂直坐标把程序标题栏也计算在内了,         * Gravity.LEFT, Gravity.TOP, Gravity.BOTTOM与Gravity.RIGHT都是如此,据边界有一小段距离         */        lp.x = 100; // 新位置X坐标        lp.y = 100; // 新位置Y坐标        lp.width = 300; // 宽度        lp.height = 300; // 高度        lp.alpha = 0.7f; // 透明度        // 当Window的Attributes改变时系统会调用此函数,可以直接调用以应用上面对窗口参数的更改,也可以用setAttributes        // dialog.onWindowAttributesChanged(lp);        dialogWindow.setAttributes(lp);        /*         * 将对话框的大小按屏幕大小的百分比设置         *///        WindowManager m = getWindowManager();//        Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用//        WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值//        p.height = (int) (d.getHeight() * 0.6); // 高度设置为屏幕的0.6//        p.width = (int) (d.getWidth() * 0.65); // 宽度设置为屏幕的0.65//        dialogWindow.setAttributes(p);        dialog.show();    }}

  

新位置的坐标如果是X=0 Y=0的话 那么弹出位置就是中间,负数的话就是向左,正数就是向右,相反就是向上为负,向下为正,且当偏移超出了屏幕时,会把Dialog的边靠在屏幕的边上,不会出去也不会压缩。

Dialog的绝对位置计算:
设我们要显示的Dialog的中心dX,dY ;我们的屏幕中心坐标为 sX,sY,则我们在设置我们的Dialog的 param.x和param.y的时候,我们需要这样来设置:
param.x=[dX-sX]
param.y=[dY-sY]
 
Dialog弹出之后屏幕不变暗的设置:
params.dimAmount=0f;
设置Dialog 参数的dimAmount=0f,就可以设置弹出了Dialog之后不会让其余部分变暗。

转载于:https://www.cnblogs.com/zimengfang/p/6149486.html

更多相关文章

  1. gradle.properties使用
  2. android调节音频
  3. Android判断网络是否可用并且开启网络
  4. ListView继续学习 长按显示菜单menu
  5. 【Android】第6章(3) AlertDialog(警告对话框)
  6. Android(安卓)使用SimpleAdapter创建图文并茂的ListView
  7. Android基础笔记(十)- 帧动画、补间动画详解、对话框
  8. android打开文件、保存对话框、创建新文件夹对话框
  9. Android(安卓)Dialog 对话框详解及示例代码

随机推荐

  1. android中的多媒体应用camera
  2. Android之SurfaceView学习一
  3. Exploring the world of Android
  4. Android(安卓)adb error: “device not f
  5. android 唤醒屏幕并解锁
  6. android 多线程并发下载文件
  7. AndEngine实现多点触控
  8. Android播放系统声音源码
  9. Android(安卓)Library Project 的使用小
  10. Android(安卓)窗体泄露问题