我想要的是......有一个浮动图标(总是在其他应用程序之上)。点击它会显示一个位于屏幕中央的弹出窗口。我已经尝试了接受的答案here,但它不起作用:(
答案 0 :(得分:1)
捆绑后,这么多功能得到了预期的结果。而不是使用ShowAtLocation()使用showAsDropDown()。定义锚点,宽度和高度。如果你的min sdk超过16,那么你可以使用gravity作为第四个参数。
popupWindow.showAsDropDown(mcontext.findViewById(R.id.ap1), LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
答案 1 :(得分:0)
好吧,在与它搏斗之后,我找到了一种方法来做到这一点。这是一个棘手的LOL。
public void createWindow() {
//initialize the popup window
// blah blah blah and right before you're about to show it, create
// a framelayout like the one below. And use windowmanager to addView
// (just like the way we create a floating icon on top of other apps)
framelayout = new FrameLayout(this);
WindowManager.LayoutParams layoutparameters = new WindowManager.LayoutParams(
width, height, WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
parameters.gravity = Gravity.TOP | Gravity.LEFT;
manager.addView(framelayout, layoutparameters);
framelayout.post(new Runnable() {
public void run() {
pop.showAtLocation(framelayout, Gravity.CENTER, 0, 0);
}
});
}
我的朋友们还没有完成!不要忘记createWindow()方法。
pop.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
try {
manager.removeView(framelayout);
framelayout = null;
} catch (Exception e) {
}
}
}, 500);
你可以离开处理程序。我使用它是因为我的弹出窗口使用动画来消除(是的,我的动画持续时间是500毫米)。完成!