首页 > 解决方案 > Webview导致页面上各种元素的背景图像变黑

问题描述

直到今天,横幅广告都运行良好。我注意到每次动画在横幅广告中发生时都会发生闪烁。

这会影响 Fragment/Activity 中所有元素的背景区域,只要 AdMob 片段被导入和加载


class AdBFiller : Fragment() {
    private lateinit var mAdView: AdView
    private val mAppUnitId: String = "ad-code"
    var fragContext: Context? = null

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        val adFrag = inflater.inflate(R.layout.banner_filler, container, false)
        fragContext = context

        initializeBannerAd()

        viewAppender(fragContext!!, adFrag)

        loadBannerAd()
        return adFrag
    }

    private fun initializeBannerAd() {
        MobileAds.initialize(fragContext!!)
    }

    private fun loadBannerAd() {
        val adRequest = AdRequest.Builder().build()
        mAdView.loadAd(adRequest)
    }

    fun viewAppender(contxt: Context, adFrag: View) {
        mAdView = AdView(contxt)
        mAdView.setAdSize(AdSize.BANNER)        // also same issue with SMART_BANNER
        mAdView.setAdUnitId(mAppUnitId)

        (adFrag as FrameLayout).addView(mAdView)
    }

    override fun onDestroyView() {
        mAdView.destroy()
        super.onDestroyView()
    }

    override fun onDestroy() {
        mAdView.destroy()
        super.onDestroy()
    }

    override fun onResume() {
        super.onResume()
        mAdView.resume()
    }


    override fun onPause() {
        super.onPause()
        mAdView.pause()
    }

}

布局(banner_filler)如下:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".activities.AdBFiller"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</FrameLayout>

调用代替使用是

 private fun inflateAds() {
        supportFragmentManager
            .beginTransaction()
            .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
            .add(R.id.adStub, AdBFiller())
            .commit()
    }

adStub 是一个 FrameLayout

我猜这是因为 AdMob 代码而自动发生的,因为它运行了很多天。如何隔离应用程序,不受这些影响?

虽然视频中影响不大,但我的其他页面受到很大影响

视频缩略图
闪烁的视频


编辑:

原来这是我的手机/制造商特有的问题,并且由于页面上加载了 WebView。由于广告使用 webview,因此问题的原因出现在广告注入代码中

型号:荣耀华为-9N,
LLD-AL20,
EMUI 9.1.0,
Android版本9

规格:

webview 的内容必须完成加载才能启动此问题。有些观点相对不受影响。对于页面的每次加载,页面的那些相同元素都会受到影响,即固定再现意味着页面上的 50 个元素中,每次固定的 20 个元素都会受到影响。

我想我必须定位和膨胀 WebView 是一种不会干扰其他元素的方式。

Webview 或广告是片段的根约束布局关闭之前的最后一个元素。

有没有人找到解决此类问题的方法?

标签: androidandroid-layoutandroid-fragmentsandroid-activityandroid-webview

解决方案


解决了:

android:layerType="software"


推荐阅读