fb_two_windows.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. "ui";
  2. /**
  3. * 一次性探测:两个 TYPE_APPLICATION_OVERLAY 窗口能否**同时绘制**。
  4. * 结论看截图:红块 A 与绿块 B 是否都出现。
  5. * 另外顺带测 FLAG_NOT_TOUCHABLE 能否动态开关。
  6. */
  7. var wm = context.getSystemService("window");
  8. var LP = android.view.WindowManager.LayoutParams;
  9. function mk(x, y, w, h, color, text) {
  10. var v = new android.widget.TextView(context);
  11. v.setText(text);
  12. v.setTextColor(-1);
  13. v.setTextSize(40);
  14. v.setBackgroundColor(color);
  15. var lp = new LP();
  16. lp.type = 2038; // TYPE_APPLICATION_OVERLAY
  17. lp.format = -3; // TRANSLUCENT
  18. lp.flags = 0x8 | 0x200; // NOT_FOCUSABLE | LAYOUT_NO_LIMITS
  19. lp.gravity = 51; // TOP | LEFT
  20. lp.x = x; lp.y = y; lp.width = w; lp.height = h;
  21. wm.addView(v, lp);
  22. return { v: v, lp: lp };
  23. }
  24. var A = mk(20, 300, 200, 200, -65536, "A");
  25. var B = mk(20, 700, 400, 300, -16711936, "B");
  26. toast("两个 overlay 已加");
  27. setTimeout(function () {
  28. // 3 秒后把 B 设成不可触摸,再等 3 秒
  29. try {
  30. B.lp.flags = B.lp.flags | 0x10; // FLAG_NOT_TOUCHABLE
  31. wm.updateViewLayout(B.v, B.lp);
  32. toast("B 已设 NOT_TOUCHABLE");
  33. } catch (e) { toast("updateViewLayout 失败 " + e); }
  34. }, 3000);
  35. setTimeout(function () { toast("探测结束"); }, 9000);