Webview导致页面各种元素背景图片变黑
Webview causing blackening of background images of various elements on page
横幅广告直到今天都运行良好。我注意到每次在横幅广告中播放动画时都会出现闪烁。
这会影响 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 代码而自动发生的,因为它运行了很多天。
如何隔离应用程序,免受这些影响?
虽然视频中影响很小,我的其他页面影响很大
编辑:
事实证明这是我的 mobile/manufacturer 特有的问题,因为 WebView 在页面上加载。
由于广告使用 webview,问题的原因似乎在于广告注入代码
型号:荣耀华为-9N,
LLD-AL20,
EMUI 9.1.0,
Android 版本 9
规格:
webview 的内容必须完成加载才能开始出现此问题。有些观点相对不受影响。对于页面的每次加载,页面的那些相同元素都会受到影响,即固定复制意味着页面上的 50 个元素,每次固定的 20 个元素受到影响。
我想我必须定位和膨胀 WebView 是一种不干扰其余元素的方式。
Webview 或广告是关闭 Fragment 的 Root ConstrainLayout 之前的最后一个元素。
有没有人找到解决此类问题的方法?
解决方法:
android:layerType="software"
android:layerType="software"
只需将其添加到 <com.google.android.gms.ads.AdView/>
即可修复加载横幅广告时背景图片变黑的问题
横幅广告直到今天都运行良好。我注意到每次在横幅广告中播放动画时都会出现闪烁。
这会影响 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 代码而自动发生的,因为它运行了很多天。 如何隔离应用程序,免受这些影响?
虽然视频中影响很小,我的其他页面影响很大
编辑:
事实证明这是我的 mobile/manufacturer 特有的问题,因为 WebView 在页面上加载。 由于广告使用 webview,问题的原因似乎在于广告注入代码
型号:荣耀华为-9N,
LLD-AL20,
EMUI 9.1.0,
Android 版本 9
规格:
webview 的内容必须完成加载才能开始出现此问题。有些观点相对不受影响。对于页面的每次加载,页面的那些相同元素都会受到影响,即固定复制意味着页面上的 50 个元素,每次固定的 20 个元素受到影响。
我想我必须定位和膨胀 WebView 是一种不干扰其余元素的方式。
Webview 或广告是关闭 Fragment 的 Root ConstrainLayout 之前的最后一个元素。
有没有人找到解决此类问题的方法?
解决方法:
android:layerType="software"
android:layerType="software"
只需将其添加到 <com.google.android.gms.ads.AdView/>
即可修复加载横幅广告时背景图片变黑的问题