小米手机无法使用WindowManager的addView,怎么解决

 我来答
匿名用户
2016-10-16
展开全部
WindowManager用来在应用与window之间的管理接口,管理窗口顺序,消息等。对于windowManager来说一个系统只有一个,它是由系统底层实现的,用于负责调度当前显示那个窗口,消息处理我们获得一个windowManager的方式如下:
WindowManager windowManager = (WindowManager)context().getSystemService(Context.WINDOW_SERVICE);11

调用比较简单。
3.代码实现
把这个弹窗叫做PopupAction,后面统一为这个称呼。
显示PopupAction代码
/**
* Show quick menu popup. Popup is automatically positioned, on top of anchor view. Calc of anchor and mRootView
* view for look out the poosition. Every side margin of 10dp and the arrow at the top of anchor.
*
* @param context the global information about an applicaion environment
* @param anchor view of call for
* @param actions action list items {@link #addActionItem(List)}
*/
public void show(Context context, View anchor, List<ActionItem> actions) {
mContext = context;
if (mContext == null) {
Log.i("MenuDialog", "context is null");
return;
}
int xPos;
int yPos;
int arrowPos;
int[] location = new int[2];

//添加菜单项
addActionItem(actions);

mShowAction = true;
//计算要弹出的位置
anchor.getLocationOnScreen(location);
Rect anchorRect =
new Rect(location[0], location[1], location[0] + anchor.getWidth(), location[1] + anchor.getHeight());

int rootHeight = mRootView.getMeasuredHeight();
int rootWidth = mRootView.getMeasuredWidth();

xPos = anchorRect.centerX() - (rootWidth / 2);

//对弹窗靠近左边和右边的处理
if (xPos < 20) {
xPos = 20;
}
DisplayMetrics dm = mContext.getResources().getDisplayMetrics();
if ((dm.widthPixels - anchorRect.centerX()) < rootWidth / 2) {
xPos = dm.widthPixels - rootWidth - 20;
}
arrowPos = anchorRect.centerX() - xPos;
yPos = anchorRect.top - rootHeight;

//设置箭头位置
showArrow((R.id.arrow_down), arrowPos);

//添加图层弹窗
android.view.WindowManager.LayoutParams params =
(android.view.WindowManager.LayoutParams) mRootView.getLayoutParams();

params.x = xPos;
params.y = yPos;
mWM.addView(mParentView, params);
mParentView.addView(mRootView);
mParentView.setOnTouchListener(this);

//设置弹出动画
Animation animationUp = AnimationUtils.loadAnimation(mContext, R.anim.grow_from_bottom);
mRootView.startAnimation(animationUp);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
麦保(深圳)科技有限公司_
2023-03-28 广告
cleanmymac是我必装的mac端清理软件,界面简洁好看,完美适配mac系统,文件清理的速度、精度都比较优秀,还是比较不错的呢。cleanmymac作为一款第三方清洁应用程序,具有专业完整的清理功能,包括释放内存、一键智能扫描垃圾和缓存... 点击进入详情页
本回答由麦保(深圳)科技有限公司_提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式