我使用WindowManager.LayoutParams
类使用TYPE_SYSTEM_ALERT
来获取所有内容的活动。一切都工作正常,除了显示分辨率似乎被放大,因此我无法看到布局的全部内容。
这是截图
(非常抱歉,因为我不熟悉StackOverflow,因此我没有直接上传图片)
我的WindowManager.LayoutParams代码是
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.RIGHT | Gravity.TOP;
wm = (WindowManager) getApplicationContext()
.getSystemService(Context.WINDOW_SERVICE);
mTopView = (ViewGroup) getLayoutInflater().inflate(R.layout.block_device, null);
getWindow().setAttributes(params);
wm.addView(mTopView, params);
我还尝试了WRAP_CONTENT
而不是FLAG_FULLSCREEN
,但它显示IllegalStateException
ActionBarView
只能与MatchParent
一起使用。
我可以尝试的任何修复???
答案 0 :(得分:0)
在5.1作为额外安全性system_alert类型的对话框的一部分,该对话框在另一个应用程序之上写入,不推荐使用UI。在我的应用程序中,我有一个活动,其中有system_alert对话框,它一直工作到5.0但在5.1中无法工作(在android.permission.SYSTEM_ALERT_WINDOW
权限之后也无效)。我提到了androidxref你可以在以下链接中看到 http://androidxref.com/5.1.1_r6/xref/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#1639
如果app试图在其他应用程序的窗口上写入,他们将检查并抛出异常 最后我们不得不重新设计应用程序以不使用System alert类型的对话框 请参阅以下代码段以获取示例代码...
String message = getString(R.string.progress_message);
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setTitle(R.string.progress_title_message);
mProgressDialog.setMessage(message);
mProgressDialog.setProgressStyle(mProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setProgress(0);
mProgressDialog.setCancelable(false);
mProgressDialog.setMax(100);
mProgressDialog.show();`