背景
我试图在当前活动之上放置一个层,它可以解释当前屏幕上发生的事情,类似于在contact+ app上发生的事情。
我知道有一些解决方案(比如showCase 库和 superToolTips 库),而且我也知道我可以创建一个视图并将其添加到活动的窗口中,但我需要放一个整体对话层在上面。
问题
无论我尝试什么,每种解决方案都无法按照我需要的方式工作。
简而言之,我需要的是:
全屏对话框。
操作栏、通知栏和后面的活动内容没有变化(不可见也不合逻辑),这意味着对话框后面的所有内容都保持不变,即在显示对话框之前显示的内容。
是透明的,除了我用于对话框的视图,应该正常显示。
我试过的
可悲的是,我总是只得到我需要的一部分。
这是我的代码:
样式.xml:
<style name="full_screen_dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
</style>
MainActivity.java:
...
final Dialog dialog = new Dialog(this, R.style.full_screen_dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.floating_tutorial);
dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
dialog.getWindow().setFormat(PixelFormat.TRANSLUCENT);
dialog.show();
这段代码会将布局放在活动的顶部,但遗憾的是它没有任何透明度,即使我已经设置了它。我使用的布局非常简单,这就是我不发布它的原因。
问题
我错过了什么?应该怎么做才能修复代码?
如何使对话框既透明、全屏又不会更改操作栏和通知栏。
工作解决方案
编辑:找到一个好的解决方案后,这里是工作代码:
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.floating_tutorial);
final Window window = dialog.getWindow();
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.show();
}