说明
最近项目中有个需求,要将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和设置背景为透明,见上文。