解决升级androidx和10.0后Dialog形势的Activity背景透明效果消失

解决升级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>

这写代码在API28support v7包的环境没有问题,最近升级androidxandroid 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>

运行 没鸟用 哈哈,我在想是不是没生效啊,又在代码里设置了windowsbackground

   @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.在onCreatesetContentView之后再设置一个背景透明

不知道为什么设置两次就有效,要看源码,有知道的大佬欢迎留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值