Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Animate an AlertDialog's entrance and exit

I have to slide in an AlertDialog when it enters and slide it out when it is dismissed, but it is not animating.

So how do I get the animation to work ?

Here is what I have,

public class SlideDialogFragment extends DialogFragment {
     @Override
     public Dialog onCreateDialog(Bundle savedInstanceState) {
              return  new AlertDialog.Builder(new ContextThemeWrapper(getActivity(),R.style.SlidingDialog))
                      .setTitle("Sliding dialog")
                      .create()
     }

themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="SlidingDialog" parent="@android:style/Theme.DeviceDefault.Dialog">
        <item name="android:windowAnimationStyle">@style/SlidingDialogAnimation</item>
    </style>
    <style name="SlidingDialogAnimation">
        <item name="android:windowEnterAnimation">@android:anim/slide_in_left</item>
        <item name="android:windowExitAnimation">@android:anim/slide_out_right</item>
    </style>
</resources>

I have referred too many resources and there doesn't seem to be a single proper way to do this that works for me, may be I am missing something

I am using

  • Android ICS
  • App is built for API 15+

Here are some related resources that I couldn't get the answer from

  • Animate a dialog fragment on dismiss
  • https://groups.google.com/d/msg/android-developers/0oCWqQC4Pww/CmUM7iNHUggJ
  • https://groups.google.com/d/msg/android-developers/a2pUV0Sigf4/WiJNg_vMQWwJ
  • https://stackoverflow.com/a/3870997/492561
like image 612
Gautam Avatar asked Aug 21 '12 05:08

Gautam


1 Answers

Here is the working code using the reference and code from the above.

// Declare a Builder.
AlertDialog.Builder builder = new AlertDialog.Builder(context);

// You can even inflate a layout to the AlertDialog.Builder, if looking to create a custom one.
// Add and fill all required builder methods, as per your need.


// Now create object of AlertDialog from the Builder.
final AlertDialog dialog = builder.create();

// Let's start with animation work. We just need to create a style and use it here as follows.
if (dialog.getWindow() != null)
    dialog.getWindow().getAttributes().windowAnimations = R.style.SlidingDialogAnimation;

dialog.show();

Regarding Style, I used the same style as used in question (in styles.xml).

<style name="SlidingDialogAnimation">
        <item name="android:windowEnterAnimation">@android:anim/slide_in_left</item>
        <item name="android:windowExitAnimation">@android:anim/slide_out_right</item>
</style>

But you can use any other custom files by placing an animation XML file in the res/anim folder.

Thanks.

like image 148
Harpreet Avatar answered Nov 08 '22 23:11

Harpreet