栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

自定义DialogFragment显示位置、动画中心异常问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

自定义DialogFragment显示位置、动画中心异常问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • 前言
  • 一、想要实现的效果
  • 二、部分关键代码
  • 二、遇到的问题
    • 1.弹窗显示的位置Y轴位置始终偏下
    • 2.弹窗缩放动画中心异常


前言

最近在自定义Dialog时,遇到一些显示方面问题,记录一下备忘

一、想要实现的效果

想要实现的效果是,点击一个图标按钮,在图标正上方以缩放动画显示弹窗。基本原理就是,点击按钮时,通过View.getLocationOnScreen(int[])方法,获取View在屏幕上的位置。然后在Dialog中通过WindowManager.LayoutParams的x、y属性修改弹窗显示位置。

二、部分关键代码

透明弹窗样式

  
        @android:color/holo_green_light
        @null
        true
        true
        true
        true
        @null
        @style/DialogScaleInOut
    
     
     
        @anim/dialog_scale_in
        @anim/dialog_scale_out
    

Dialog使用的DialogFragment,重写onCreateDialog方法

 public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {

        Dialog dialog = new Dialog(getContext(), R.style.baseDialog);
        dialog.setContentView(R.layout.dialog_frag);

        dialog.getWindow().setWindowAnimations(R.style.DialogScaleInOut);
        WindowManager.LayoutParams attributes = dialog.getWindow().getAttributes();

        attributes.gravity = Gravity.TOP | Gravity.START;
        attributes.x = mLocation[0];
        attributes.y = mLocation[1];
        LogUtils.d("DialogGame.onCreateDialog, set window location, x:%s, y:%s", mLocation[0], mLocation[1]);

        dialog.getWindow().setAttributes(attributes);
        // initView(dialog);
        return dialog;
    }
二、遇到的问题 1.弹窗显示的位置Y轴位置始终偏下

黄色的弹窗的Window.LayoutParam的x、y是直接使用的showDialog的屏幕位置,但显示却并没有上部对齐。

多次测试后,发现是View.getLocationOnScreen(int[])获取到的时绝对的位置,相对整个屏幕左上角,包括了状态栏。但 WindowManager.LayoutParams的x、y,应该是相对了Window的,未包括状态栏,受主题样式影响,android:windowNoTitle为false时,甚至更为偏下。

``

2.弹窗缩放动画中心异常

弹窗进入Scale动画如下,显示的问题是缩放的中心并不是底部中心,而是很奇怪一个点。



    

最后测试发现,是受主题样式影响,修改Dialog样式父类为android:Theme.Dialog后,动画中心恢复正常。猜测Theme.AppCompat.Dialog中有设置背景相关的东西,影响了Window显示区域,使中心点计算出现偏差。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/658662.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号