Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create a transparent dialog on top of activity

Background

I'm trying to put a layer on top of the current activity which would have explanation of what is going on on the current screen, similar to what occurs on contact+ app .

I know there are some solutions for this (like the showCase library and the superToolTips library ) , and I also know that I can create a view and set it on top by adding it to the window of the activity , but I need put a whole dialog layer on top.

Problem

No matter what I try, each solution doesn't work the way I need it to work.

in short , what I need is:

  • full screen dialog.

  • no change (not visual and not logical) to the action bar, notification bar, and content of the activity behind, meaning that everything behind the dialog stays the same it was shown a moment before the dialog was shown.

  • be transparent except for the views I use for the dialog, which should be shown normally.

what I've tried

Sadly, I've always got only a part of the things I needed.

here's my code:

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

This code will put the layout on top of the activity, but sadly it doesn't have any transparency , even though I've set it . The layout I've used is very simple which is why I don't post it.

Question

what am I missing ? what should be done to fix the code?

how can I make the dialog both transparent, full screen AND that it won't change the action bar and notifications bar.


Working solution

EDIT: after finding a good solution, here's the working code:

@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(); } 
like image 916
android developer Avatar asked Aug 20 '13 14:08

android developer


People also ask

What is transparent activity?

In Android, we can create a transparent activity that will not be visible but your application will be running. The best part of this transparent activity is that you can create a transparent activity by just changing the resource file and we need not write the java or kotlin code for the same.


2 Answers

Just change the background color of your Dialog:

dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 

Edit:

This prevents the dim effect:

dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
like image 93
Steve Benett Avatar answered Sep 19 '22 00:09

Steve Benett


Just add this, it really works!

<item name="android:windowIsTranslucent">true</item>         <item name="android:windowCloseOnTouchOutside">true</item>         <item name="android:windowBackground">@android:drawable/alert_dark_frame</item>         <item name="android:windowContentOverlay">@null</item>         <item name="android:windowNoTitle">true</item>         <item name="android:windowIsFloating">true</item>         <item name="android:backgroundDimEnabled">false</item> 
like image 23
Javier Rodriguez Avatar answered Sep 18 '22 00:09

Javier Rodriguez