android - 如何在 Android 中创建始终处于顶部的全屏覆盖 Activity

标签 android android-layout android-activity window

我希望能够创建一个始终位于 Android 显示屏前面的 Activity。 它应该不接收任何输入,只需将其传递给它下面的任何应用程序。类似于 HUD。

我能够研究我需要将基础窗口类型设置为 TYPE_SYSTEM_ALERT 但看起来 Android 忽略了我的代码 - 即使我从 list 中删除 android.permission.SYSTEM_ALERT_WINDOW 权限也没有抛出异常。 (必须使用此窗口类型)。当我尝试在对话框上使用 ALERT 类型时,它工作正常,但我无法将对话框变成全屏透明实体。 这是我的代码,也许缺少一些简单的东西。

public void onCreate(Bundle savedInstanceState) {       
     super.onCreate(savedInstanceState);        

     requestWindowFeature(Window.FEATURE_NO_TITLE);
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
     getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);             
     getWindow().setBackgroundDrawableResource(android.R.color.transparent);
     getWindow().setFormat(PixelFormat.TRANSLUCENT);
     setContentView(R.layout.main);
}

半透明设置必须在xml list 中从外部启用,否则它也不起作用。

 <item name="android:windowIsTranslucent">true</item>

最佳答案

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);

WindowManager wm = (WindowManager) getApplicationContext()
    .getSystemService(Context.WINDOW_SERVICE);

ViewGroup mTopView = (ViewGroup) App.inflater.inflate(R.layout.main, null);
getWindow().setAttributes(params);
wm.addView(mTopView, params);

关于android - 如何在 Android 中创建始终处于顶部的全屏覆盖 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10095344/

相关文章:

android - 在通过蓝牙接收到一些文件时触发一个 Activity

java.lang.RuntimeException : Unable to start activity

java - Android:三星 S2 上的 GLES 2.0 损坏?

android - 在 android 后台收集和保存大量数据的最有效方法

android - 将 OpenCV 轮廓从 JNI C++ 函数传递到 Android 中的 Java

android - 带有参数 adjustViewBounds Android studio 的图像底部按钮

android - 漂浮 fragment

java - FragmentTabHost - 没有已知标签为空的标签

android - Timepicker 在电话上被切断

android - 如何控制Android返回堆栈