Activity背景透明和視窗化
阿新 • • 發佈:2019-01-01
說明
最近專案中有個需求,要將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和設定背景為透明,見上文。