以下代码在BroadcastReceiver中运行,并向系统级窗口管理器添加透明覆盖,以使方向保持在横向模式。这段代码工作正常。
但是,当我将此代码放在Activity中时,为了让Activity添加叠加层,没有任何反应。对于我的生活,我无法弄清楚为什么。我在一个从OnClickListener调用的方法中有它。我知道该方法被调用,因为我放在方法顶部的Toast消息。
final View view = new View(context);
int dimension = 0;
int pixelFormat = PixelFormat.TRANSLUCENT;
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
dimension, dimension,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
pixelFormat);
params.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
final WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
wm.addView(view, params);
这段代码不能让它在活动中运行有什么问题?
在活动中,context
的每个实例都替换为this
。这可能是问题吗?
答案 0 :(得分:1)
问题很可能在你的上下文中。
事实证明,广播接收器中onReceive
方法中的上下文与活动不同context
。它会膨胀UI元素,但是通胀将使用您运行的系统的默认主题完成,而不是在应用程序中定义的内容。 (如果这成为一个问题,你必须要注意这一点。)
另一方面,当你在onClickListener中时,这是onClickListener匿名还是硬引用?
例如:你在做什么
yourButton.setOnClickListener( new View.OnClickListener() { //code }; );