Friday, August 5, 2011

Small Tutorial on Creating a transparent activity


Sometimes, we need an activity to some processing but we need not necessarily have a UI.
For this, you can do just not do a setContentView() call. This will show up an activity with the default theme applied.

But, what if you need a transparent activity? It should be showing what is behind it and still do some stuff.

For that, follow this tutorial:
1. Create an Android project in eclipse.
2. Let us create an Activity called TransparentActivity.
3. Then, we need to create a transparent theme.



<resources>
  <style name="Theme.Transparent" parent="android:Theme">
   <item name="android:windowIsTranslucent">true</item>
   <item name="android:windowBackground">@android:color/transparent</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>
  </style>
</resources>


4. Add the above code to styles.xml under res/values folder.
5. Then, in your AndroidManifest.xml apply the theme "Theme.Transparent" to this activity like:


6. That's it you are done. This activity will be transparent and not display anything.
7. Additionally, you can call requestWindowFeature(Window.FEATURE_NO_TITLE) to remove the title bar.

Sometimes, you may need to display a dialog on this activity. Say, you are processing something and want to show the user the progress. For this, you can create a ProgressDialog and show it.
But, in case of a transparent activity, it displays an outer box for the dialog.

To get rid of this:
In your onCreateDialog or the place where you are initializing the dialog do the following:


@Override
protected Dialog onCreateDialog(int id) {

switch(id) {
case 100:
dialog = new ProgressDialog(this, ProgressDialog.STYLE_SPINNER);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setMessage("Message");
//The below line does the trick!!
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
return dialog;
}
return super.onCreateDialog(id);
}


That's it for this tutorial. Check this out :)

No comments:

Post a Comment