Сегодня я боролся с анимацией диалогов, наконец, заставил ее работать с использованием стилей, поэтому вот пример.
Для начала, самое главное - у меня, вероятно, сегодня он работал 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;