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

фон

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

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

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

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

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

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

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

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

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

вот мой код:

стили.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();
}

2 ответов


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

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

Edit:

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

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

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

<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>