我正在尝试在当前活动之上放置一层,以解释当前屏幕上正在发生的事情,类似于contact + app上发生的事情。
我知道有一些解决方案(例如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:
...
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();
}
只需更改对话框的背景颜色即可:
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
编辑:
这样可以防止变暗的效果:
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句