Анимируйте вход и выход AlertDialog

Я должен вставлять AlertDialog, когда он входит, и выдвигать его, когда он закрывается, но он не анимируется.

Итак, как заставить анимацию работать?

Вот что у меня есть,

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>

Я ссылался на слишком много ресурсов, и, похоже, не существует единственного правильного способа сделать это, который работал бы для меня, может быть, я что-то упускаю.

Я использую

  • Android ICS
  • Приложение создано для API 15+

Вот некоторые связанные ресурсы, от которых я не смог получить ответ


person Gautam    schedule 21.08.2012    source источник
comment
если вы можете заставить действие скользить и выскальзывать. Используйте его для AlertDialog, просто измените его тему на диалоговое окно. Это создает действие вместо диалогового окна и заставляет его работать как диалоговое окно. Это упростит вашу проблему. предложение.   -  person Rekha    schedule 21.08.2012
comment
Я подумал об этом, но слишком сложно манипулировать его содержимым во время выполнения.   -  person Gautam    schedule 21.08.2012


Ответы (1)


Вот рабочий код, использующий ссылку и код выше.

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

Что касается стиля, я использовал тот же стиль, что и в вопросе (в 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>

Но вы можете использовать любые другие пользовательские файлы, поместив XML-файл анимации в папку res/anim.

Спасибо.

person Harpreet    schedule 26.11.2018
comment
если пользовательский файл анимации, то он должен быть @anim/slide_in_left в styles.xml - person Suchith; 22.07.2020