簡體   English   中英

在活動之上創建透明對話框

[英]Create a transparent dialog on top of activity

背景

我試圖在當前活動的基礎上放置一個圖層,該圖層將解釋當前屏幕上發生的情況,類似於contact + app上發生的情況。

我知道有一些解決方案(比如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();

此代碼將布局放在活動的頂部,但遺憾的是它沒有任何透明度,即使我已經設置了它。 我使用的布局非常簡單,這就是我不發布的原因。

我錯過了什么? 應該怎么做來修復代碼?

如何使對話框既透明又全屏,並且不會更改操作欄和通知欄。


工作方案

編輯:找到一個好的解決方案后,這是工作代碼:

@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();
}

只需更改對話框的背景顏色:

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

編輯:

這可以防止暗淡效果:

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM