android popupWindow 在android 7.0上显示缺陷

android popupWindow 在android 7.0上显示缺陷

一:popupWindow 简析
1、含义

Popwindow就是Android上自定义的一个弹出窗口,是在当前activity的顶部的,可以在任意的位置显示,在显示的时候会阻塞UI线程。

2、构造

Popwindow可以直接通过构造方法获取

new PopupWindow(View contentView,intwidth,intheight,booleanfocusable)

构造方法有很多,但是要确保contentview ,width,hight的设置,否则Popwindow不会显示任何内容

这些参数也都可以单独进行设置,比如 popwindow.setContentView(contentView);

3、解析

popwindow的难点就在于这几个参数的设置,一般容易使人迷惑。

popupWindow1.setFocusable(true);//获取焦点

popupWindow1.setOutsideTouchable(true);//获取外部触摸事件

popupWindow1.setTouchable(true);//能够响应触摸事件

popupWindow1.setBackgroundDrawable(newColorDrawable(0x8f000000));//设置背景

二:popupWindow 7.0缺陷

由于popupWindow是一个比较成熟的弹出框的控件,广泛运用于android app项目设计中。
在使用showAsDropDown时候我们会发现 原本显示中部的popupWindow,变成了顶部或者底部,整个app呈现显示错乱的方式。不仅造成了显示错乱,在一些业务app中更是容易造成一些数据加载错乱和崩溃问题。 解决办法最简单是继承 popupWindow的子类中重写 showAsDropDown()方法,由于谷歌在7.1版本以及更新了这个缺陷补丁,所有只需要在sdk24时候做判断。

    @Override 
    public void showAsDropDown(View anchor) {
        if(Build.VERSION.SDK_INT == 24 && anchor!=null) {
            Rect rect = new Rect();
            anchor.getGlobalVisibleRect(rect);
            int h=anchor.getResources().getDisplayMetrics().
            heightPixels -rect.bottom;                        
            setHeight(h);
        }
        super.showAsDropDown(anchor);
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值