解决升级androidx和10.0后Dialog形势的Activity背景透明效果消失
Activity
也可以像Dialog
那样显示,只需要指定Activity的主题透明即可
在Manifest
中设置Dialog
透明的主题样式
<activity
android:name=".MeetNotesActivity"
android:configChanges="keyboardHidden|orientation|keyboard|screenSize|screenLayout"
android:theme="@style/dialog"
android:screenOrientation="portrait"//8.0要加上这个
android:windowSoftInputMode="stateHidden|adjustPan" />
styles
<style name="dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@color/trans80</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowIsTranslucent">true</item>
</style>
这写代码在API28
和support v7
包的环境没有问题,最近升级androidx
和android Q
之后发现,Activity可以正常像Dialog
弹出来,但是背景半透明没了,百思不得其解,是不是新的API加了什么限制,开始google,没找到有用的解决办法,在一篇博客中找到了灵感博客地址,升级androidx后BaseActivity继承的是androidx.appcompat.app.AppCompatActivity
注释里建议使用 Theme.AppCompat
里面的主题,尝试去修改一下styles
<style name="dialog" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@color/trans80</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowIsTranslucent">true</item>
</style>
运行 没鸟用 哈哈,我在想是不是没生效啊,又在代码里设置了windows
的background
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_dialog);
this.setFinishOnTouchOutside(false);//设置窗口周围触摸不消失
getWindow().setBackgroundDrawableResource(R.drawable.shape_dialog_activity_transparent);
}
//drawable
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/transparent" />
</shape>
在运行 发现既然失效了,然后我去掉的styles里面的android:windowBackground
发现又不行了
<style name="dialog" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowIsTranslucent">true</item>
</style>
两个地方一个都不能缺,都加上就可以
总结
1.styles
主题的parent 要和Actitivty
的对应
2.在onCreate
的setContentView
之后再设置一个背景透明
不知道为什么设置两次就有效,要看源码,有知道的大佬欢迎留言