Создать прозрачный диалог поверх действия
фон
Я пытаюсь поставить поверх текущей деятельности, которая бы объяснение того, что происходит на экране, аналогично тому, что происходит на контакт+ приложение .
Я знаю, что для этого есть некоторые решения (например,витрина библиотека и библиотека 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>