Сегодня я боролся с диалоговой анимацией, наконец-то она заработала, используя стили, так что вот пример.
Начнем с того, что самое важное - у меня, наверное, сегодня было 5 разных способов, но я не мог сказать, потому что ... Если настройки анимации ваших устройств установлены на «Без анимации» (Настройки → Дисплей → Анимация), диалоги не будут анимированными, независимо от того, что вы делаете!
Ниже приведена урезанная версия моего styles.xml. Надеюсь, это говорит само за себя. Это должно быть расположено в res/values
.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="PauseDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowAnimationStyle">@style/PauseDialogAnimation</item>
</style>
<style name="PauseDialogAnimation">
<item name="android:windowEnterAnimation">@anim/spin_in</item>
<item name="android:windowExitAnimation">@android:anim/slide_out_right</item>
</style>
</resources>
windowEnterAnimation
является одной из моих анимаций и находится в res\anim
.
windowExitAnimation
- это одна из анимаций, которая является частью Android SDK.
Затем, когда я создаю диалог в своей деятельности onCreateDialog(int id)
, я делаю следующее.
Dialog dialog = new Dialog(this, R.style.PauseDialog);
// Setting the title and layout for the dialog
dialog.setTitle(R.string.pause_menu_label);
dialog.setContentView(R.layout.pause_menu);
В качестве альтернативы вы можете установить анимацию следующим образом вместо использования конструктора Dialog, который принимает тему.
Dialog dialog = new Dialog(this);
dialog.getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation;