1. 程式人生 > >Activity背景透明和視窗化

Activity背景透明和視窗化

說明

最近專案中有個需求,要將VideoView放在Dialog中,而且VideoView上方懸浮一個半透明的全屏按鈕。
發現…有BUG,視訊亮度變暗了,好像是被一個蒙層遮蓋了。百度了一下,找了幾個解決方法。

  • 使用mVideo.setZOrderOnTop(true);將VideoView放到最上層,視訊確實正常了,但是全屏按鈕看不見了,但點選事件還有。
  • 改變螢幕的亮度,
WindowManager.LayoutParams a = dialog.getWindow().getAttributes();
a.dimAmount = 0;
dialog.getWindow().setAttributes
(a);

發現不起作用。

VideoView放在Activity中沒有問題,那是不是可以將Activity做成dialog樣式呢?
嘗試給Activity設定主題(theme)為

<activity
    android:name="com.….ActivityDialog"
    android:theme="android:theme="@style/Theme.AppCompat.Dialog"
    />

發現跟在dialog中一樣,視訊會變暗。設定setZOrderOnTop(true),全屏按鈕不可見了。

只好做成背景透明的Activity:

背景透明的Activity

為Activity設定主題

<activity
    android:name="com.….ActivityDialog"
    android:theme="android:theme="@style/Transparent"
    />
<style name="Transparent" parent="@style/Base.Theme.AppCompat">
    <item name="android:windowBackground">@color/transparent</item>
    <item name="android:windowNoTitle"
>true</item> <item name="android:windowIsTranslucent">true</item>
</style>
  • 如果我們的Activity繼承自AppCompatActivity ,那麼就必須繼承@style/Base.Theme.AppCompat,否則會報錯。

  • 在Activity佈局的最外層要設定背景為透明或半透明(根據需求,如:android:background="@android:color/transparent")。

  • 還要去掉ActionBar:

getSupportActionBar().hide();// 隱藏ActionBar

或者在上面Transparent主題中加一行item
<item name="windowActionBar">false</item>
直接繼承 Theme.AppCompat.NoActionBar 應該也可以。

Activity視窗化

給Activity設定主題(theme)為

<activity
    android:name="com.….ActivityDialog"
    android:theme="android:theme="@style/Theme.AppCompat.Dialog"
    />

或者自定義主題:繼承@style/Theme.AppCompat.Dialog
這裡寫圖片描述
這裡寫圖片描述

ctrl + 左鍵 點進去檢視屬性,根據需求覆蓋屬性。
如需去掉ActionBar和設定背景為透明,見上文。