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 = 下标题的高度。
可根据实际情况用获得到的这些数据。
《完》
写的比较乱,希望对大家有帮助,如果有什么不理解的地方,或者上面没有提到的一些特殊情况,请留言。我们一起探究,谢谢~~~~~~~~~~~~~~~
- popupWindow显示位置的探究以及canvas的起始位置
- Android PopupWindow 的显示位置
- Android PopupWindow 的显示位置
- 窗体位置的起始位置
- VC++设置对话框显示的起始位置
- popupWindow 指定位置上的显示
- popupWindow 在指定位置上的显示
- PopupWindow 显示位置 大小的设置
- popupWindow 在指定位置上的显示
- popupwindow 显示在指定的位置
- popupWindow 在指定位置上的显示
- popupWindow 在指定位置上的显示
- PopupWindow和dialog的显示位置
- popupWindow 在指定位置上的显示
- Android7.0 popupWindow显示位置的问题
- PopupWindow的弹出位置
- 关于popupWindow的位置
- 匹配的起始位置 \G
- Android:PendingIntent的FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT
- 自己写一个MVC框架
- 1_顺序表基本操作
- phonegap push-消息推送实现
- JAVA导入
- popupWindow显示位置的探究以及canvas的起始位置
- 在lua中 获取1到n的随机数列
- Android Broadcast 和 BroadcastReceiver的权限限制
- android viewpager自适应
- JavaScript 逗号语句
- 黑马程序员——OC语言中的block数据类型
- 第16周项目 3.1 oj 10 100
- 第15周 项目4-两数和与差(用参数带回结果)
- 寻找发帖水王(上-题目)