popupWindow显示位置的探究以及canvas的起始位置

来源:互联网 发布:青山大禹水利软件 编辑:程序博客网 时间:2024/04/29 05:43

   最近做了一些功能,都是与popupWIndow显示的位置有关。大家都知道Android系统的手机是在太多了,而手机系统做的各有各的特点,导致popupWindow显示的位置总是无法适应所有手机。最难缠的要数魅族手机。popupWindow显示不同有以下几个现状:

        popupWindow.showAtlocation(view,Gravity.NO_GRAVITY,x,y),讨论的是当y=0时的处理方法

      一、横竖屏显示不一致:(这个在魅族手机上基本上必现)PopupWindow可以说是一个容器,装着view,然后画到屏幕上。竖屏的时候,它的起始位置是在输入法的起始位置;横屏的时候,他的起始位置就在屏幕的最上面。

     魅族手机:横屏的时候,起始位置和statusbar的起始位置一样,这样你的popupWIndow就会出现在最上面,并被statusbar挡住。

    解决方法:1. 这种方法适用于大部分机型,并不适用于View.onDraw(Canvas cavas)方法中

                              Rect rect = new Rect();
                             getWindowVisibleDisplayFrame(rect);

                             rect.top就是statusbar的高度,用屏幕的高度                      

                             context.getResources().getDisplayMetrics().heightPixels减去rect.top就可以了。

                      2.这种根据系统提供的属性去获得该机型的statusBar的高度。这个方法我测试过,应该是适用于所有机                           型

                               int result = 0;
                               int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
                               if (resourceId > 0) {
                                   result = getResources().getDimensionPixelSize(resourceId);
                               }

                        3.这个方法简单,popupWindow显示位置就是location[1],并不适用于View.onDraw(Canvas cavas)方                                法中

                                int[] location = new int[2];
                                getLocationInWindow(location);

                         location[0]是屏幕宽的的偏差,location[1]是屏幕高度的偏差,遇到这种情况,用location[1]也可以。

二.onDraw(Canvas canvas)另一种情况是popupWindow显示遮住了底部的标题栏

        原因:他的画布高度包括下标题的高度,而且他的画布起始位置是statusbar+下 标题的高度。这种情况也是非常       特殊的

        这种情况你要想画一些图片或者文字,并要与正常机型区别对待时,就有点困难,我想了很长时间:

      解决方法:

          1.    Rect frame = new Rect();
            getWindowVisibleDisplayFrame(frame);    

             frame.bottom - frame.top = 画布的高度。

              屏幕的高度 - frame.bottom = 下标题的高度。

            可根据实际情况用获得到的这些数据。   

                                                               《完》

     写的比较乱,希望对大家有帮助,如果有什么不理解的地方,或者上面没有提到的一些特殊情况,请留言。我们一起探究,谢谢~~~~~~~~~~~~~~~

                   

0 0
原创粉丝点击