使用WindowManager的TYPE_SYSTEM_ALERT时显示分辨率无效

时间:2015-01-06 19:10:46

标签: android

我使用WindowManager.LayoutParams类使用TYPE_SYSTEM_ALERT来获取所有内容的活动。一切都工作正常,除了显示分辨率似乎被放大,因此我无法看到布局的全部内容。

这是截图

Layout Snapshot

(非常抱歉,因为我不熟悉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一起使用。

我可以尝试的任何修复???

1 个答案:

答案 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();`