2015-07-01 4 views
8

Скажем, у меня есть несколько фрагментов диалога, которые отображаются в ответ на сообщения и события, которые могут появиться в любом порядке. Обычно последний отображаемый диалог будет сверху. Есть ли способ показать фрагмент диалога под существующим или изменить их z-порядок после их отображения?Как поднять один DialogFragment над другим?

Для моего приложения должно быть довольно редко показывать несколько диалоговых окон за раз, но это может произойти. Существует один конкретный диалог, который всегда должен быть сверху, когда это видно.

+0

Кто-нибудь хочет объяснить нижние горизонты? –

+0

Эти нисходящие нити не имеют никакого смысла. + 1'ed для противовеса. Кроме того, я изучаю этот вопрос, это определенно интересный. – Sebastiano

+0

Зачем вам нужно отображать несколько диалогов? Я бы порекомендовал другой подход, так как щелчок «увольнение» в связке диалогов был бы довольно ужасным. Рассмотрим другой подход, такой как менеджер диалогов, который поддерживает приоритет отображения диалогов по мере их появления. – Cookster

ответ

4

Диалог создает под-окно приложения. Диспетчер окон Android (WindowManagerService) автоматически вычисляет z-порядок окна в зависимости от его типа и сохраняет его в поле WindowStatemLayer. Внутренние классы Android имеют доступ к этому полю и иногда изменяют z-порядок окна, но этот API не отображается в Android SDK. Таким образом, кажется, что единственный способ повлиять на z-порядок диалога - это воссоздать его.

Все, что я написал выше, является лишь результатом краткого исследования исходного кода Android, поэтому я могу ошибаться. И, возможно, есть хакерский способ сделать то, что вы хотите, используя отражение и доступ к частным полям и методам. Но я не уверен, что это хорошая идея попробовать и сделать это. По моему мнению, было бы лучше иметь только один диалог или даже активность и управлять фрагментами внутри него.

+0

Можно ли его изменить с помощью Reflection? – Sebastiano

+1

@dextor, оконный менеджер работает в процессе выполнения Android, поэтому к нему нельзя получить доступ через отражение. – Michael

Смежные вопросы