Подтвердить что ты не робот

Создайте прозрачный диалог поверх активности

Фон

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

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

Проблема

Независимо от того, что я пытаюсь, каждое решение не работает так, как мне нужно, чтобы оно работало.

Короче говоря, мне нужно:

  • полноэкранный диалог.

  • никаких изменений (не визуальных и нелогичных) на панели действий, панели уведомлений и содержимого активности позади, что означает, что все, что находится за диалогом, остается таким же, как было показано за минуту до того, как было показано диалоговое окно.

  • быть прозрачным, за исключением видов, которые я использую для диалога, который должен отображаться в обычном режиме.

то, что я пробовал

К сожалению, у меня всегда была только часть того, что мне нужно.

здесь мой код:

styles.xml:

<style name="full_screen_dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    </style>

MainActivity.java:

...
final Dialog dialog = new Dialog(this, R.style.full_screen_dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.floating_tutorial);
dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
dialog.getWindow().setFormat(PixelFormat.TRANSLUCENT);
dialog.show();

Этот код поместит макет поверх операции, но, к сожалению, у него нет прозрачности, даже если я его установил. Макет, который я использовал, очень прост, поэтому я не публикую его.

Вопрос

что мне не хватает? что нужно сделать, чтобы исправить код?

как я могу сделать диалог прозрачным, полноэкранным и что он не изменит панель действий и панель уведомлений.


Рабочее решение

EDIT: после нахождения хорошего решения здесь рабочий код:

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final Dialog dialog = new Dialog(this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.floating_tutorial);
    final Window window = dialog.getWindow();
    window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
    window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.show();
}
4b9b3361

Ответ 1

Просто измените цвет фона вашего диалога:

dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

Edit:

Это предотвращает эффект тусклого эффекта:

dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

Ответ 2

Просто добавьте это, это действительно работает!

<item name="android:windowIsTranslucent">true</item>
        <item name="android:windowCloseOnTouchOutside">true</item>
        <item name="android:windowBackground">@android:drawable/alert_dark_frame</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:backgroundDimEnabled">false</item>