麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統(tǒng) > Android > 正文

Android Webview滑進(jìn)出屏幕閃爍的解決方法

2019-10-21 21:19:21
字體:
供稿:網(wǎng)友

前言

在使用Webview進(jìn)行滑動(dòng)操作時(shí),從屏幕可見區(qū)域外向內(nèi)滑動(dòng)時(shí),會(huì)出現(xiàn)webview區(qū)域閃爍的問題(反之也是),本文將提供一種解決方案。

問題圖示

Android,Webview,屏幕閃爍

xml布局:

<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:fillViewport="true" android:overScrollMode="never" android:scrollbars="none"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <View android:id="@+id/contentView" android:layout_width="match_parent" android:layout_height="600dp" android:background="@color/colorPrimary" /> <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/contract_font"></WebView> </LinearLayout></android.support.v4.widget.NestedScrollView>

可以看到,NestedScrollView嵌套webview,且webview初始未在一屏內(nèi)時(shí),滑進(jìn)出屏幕時(shí)會(huì)有短暫的白色塊。

解決問題

方案對(duì)比

 

 

方案 考慮點(diǎn)
android:hardwareAccelerated="false" 5.0 開始Android系統(tǒng)為了充分利用GPU的特性,使得界面渲染更加平滑而默認(rèn)開啟的,如果關(guān)掉的話,那么整個(gè)網(wǎng)頁不流暢了,豈不是得不償失——>放棄
setBackgroundColor(Color.parseColor(“#00000000”)); setBackgroundResource(R.drawable.white); 設(shè)置底色背景,但是webview本身是加載的H5頁面,使用的是H5頁面的底色背景,而且通過上面的gif可以看出,沒有效果——>放棄
==通過樣式布局,讓webview保持在第一屏內(nèi)初始化== 本文嘗試的方案

方案探索

1.xml布局

<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:fillViewport="true" android:overScrollMode="never" android:scrollbars="none"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/contract_font"></WebView> <View android:id="@+id/contentView" android:layout_width="match_parent" android:layout_height="600dp" android:background="@color/colorPrimary" /> </FrameLayout></android.support.v4.widget.NestedScrollView>

通過FrameLayout來疊加使得webview保持在第一屏內(nèi)初始化,然后設(shè)置webview的padding,這樣使得完整的H5內(nèi)容是在ContentView下方顯示。

但是——>webview設(shè)置padding根本無效!!!

怎么辦呢?無論怎樣也想不到為什么會(huì)如此,畢竟本身api的實(shí)現(xiàn)上是有些缺陷的(https://stackoverflow.com/questions/9170042/how-to-add-padding-around-a-webview )

2.解決問題

最終的解決方案則是通過注入js代碼來控制H5的padding來解決。

 webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { contentView.post(new Runnable() {  @Override  public void run() {  contentViewHeight = px2dp(getApplicationContext(), contentView.getMeasuredHeight());  if (contentViewHeight > 0) {  webView.loadUrl("javascript:document.body.style.marginTop=/"" + contentViewHeight + "px/"; void 0");  }  } }); } });

看下猜想運(yùn)行的結(jié)果:

Android,Webview,屏幕閃爍

H5的顯示缺少了頂部,這樣看來padding是沒有效果的。但是,為什么會(huì)沒有效果呢,難道設(shè)置padding有問題?
之后查看了上面嵌入的網(wǎng)頁的源碼查看了下(網(wǎng)頁是網(wǎng)絡(luò)上隨便找的一個(gè)url):

https://36kr.com/

打開網(wǎng)頁編輯模式,查看body這塊的樣式:

Android,Webview,屏幕閃爍

可以看到要注入的js控制的樣式這塊是沒有設(shè)置的。因此可以將padding-top的參數(shù)通過這里設(shè)置進(jìn)去。

Android,Webview,屏幕閃爍

但是發(fā)現(xiàn)設(shè)置的該參數(shù)無效,是什么原因呢?接著往下翻:

Android,Webview,屏幕閃爍

原來是body中控制了padding-top的最高級(jí)樣式顯示,所以element-style中設(shè)置無效。所以要么把這段注釋掉,重新寫入至element-style中,要么嘗試設(shè)置margin-top的方法。這里采用后者的做法:

Android,Webview,屏幕閃爍

可以看到,網(wǎng)頁頂部出現(xiàn)了設(shè)置好的marin-top空白的高度。

只需要將這部分操作轉(zhuǎn)換為對(duì)應(yīng)的代碼即可:

將上面的

webView.loadUrl("javascript:document.body.style.paddingTop="" + contentViewHeight + "px"; void 0");

替換為:

webView.loadUrl("javascript:document.body.style.marginTop=/"" + contentViewHeight + "px/"; void 0");

3.運(yùn)行效果

Android,Webview,屏幕閃爍

可以看到已經(jīng)沒有閃爍了。

總結(jié)

整個(gè)方案的實(shí)現(xiàn)其實(shí)就兩塊:

1.布局,讓webview在一屏內(nèi)初始;

2.設(shè)置H5網(wǎng)頁的margin-top或者padding-top;

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品一区二区在线观看视频 | 最新欧美精品一区二区三区 | 韩毛片| 91av网址| 黄色毛片视频在线观看 | qyl在线视频精品免费观看 | 神马久久精品综合 | v片在线看 | 久久久噜噜噜久久熟有声小说 | 小情侣嗯啊哦视频www | 一级黄色片武则天 | 久在线观看福利视频69 | 狠狠干五月天 | 一级做受大片免费视频 | 九九热这里只有精品8 | 黄色片网站免费看 | 成人免费观看av | 露脸各种姿势啪啪的清纯美女 | 羞羞视频免费网站男男 | 亚洲成年人免费网站 | 久久国产精品区 | 99re热精品视频 | 免费黄色短视频网站 | 色悠悠久久久久 | av电影在线观看免费 | 福利在线播放 | wwwxxx免费视频 | 水卜樱一区二区av | 伊人久久国产精品 | 国产激情精品一区二区三区 | 精品一区免费 | 国产日韩中文字幕 | 久久久久久亚洲国产精品 | 精品一区二区三区中文字幕 | 免费日本一区二区 | 国产精品999在线观看 | 宅男噜噜噜66一区二区 | 毛片免费视频播放 | 免费看日产一区二区三区 | 久久久国产视频 | 精品一区在线视频 |