背景
我想在当前活动的顶部放置一个图层,解释当前屏幕上正在进行的事情,类似于 联系人+应用程序 的操作。
我知道有一些解决方案(例如 showCase库 和 superToolTips库 ),我也知道可以创建一个视图并将其添加到活动窗口中以置于顶部,但我需要放置一个整个的对话框图层。
问题
无论我尝试什么,每个解决方案都不能按照我需求的方式工作。
简而言之,我需要:
全屏对话框。
不对动作栏、通知栏和后面的活动内容做出任何更改(即,对话框后面的所有内容保持与对话框出现前一样)。
透明,除了我用于对话框的视图之外,这些视图应正常显示。
我尝试过的方法
可悲的是,我总是只得到我所需要的一部分。
这是我的代码:
styles.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:
->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();
}