android 在開發WebView時,去掉網頁的標題並設定成自訂的標題

來源:互聯網
上載者:User

android 在開發WebView時,去掉網頁的標題並設定成自訂的標題

IOS中關於去掉標題只需類似下面的兩行代碼

[js appendString:@var title = document.getElementsByClassName('navbar-top')[0];];
[js appendString:@title.parentNode.removeChild(title);];

而android上面拿掉網頁的標題還真是難事,自己花了好幾天的時間終於大功告成,現目前這絕對是拿掉標題換成自訂的標題的第一人。網上的都是更改標題的文字,可有時載入的H5頁面的標題與app風格不一時,就必須把標題列拿掉換成自己的標題列。先上網頁的圖和最後換掉標題的圖

上一段網頁的源碼

1,初始化WebView並設定以下屬性

 

webview= (WebView) findViewById(R.id.newer_guide_webview);//設定WebView屬性,能夠執行Javascript指令碼webview.getSettings().setJavaScriptEnabled(true);//載入需要顯示的網頁webview.setWebViewClient(new MyWebViewClient());webview.loadUrl(mUrl);//設定Web視圖webview.getSettings().setJavaScriptEnabled(true);webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
2,自訂WebviewClient,即繼承WebViewClient並實現他的方法,並添加jsoup jar包(這種方法不好,後面有正確的方式)

 

//Web視圖
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
if (!firstLink){//必須加上,不然會不斷重新整理WebView介面
firstLink=true;
/**拿掉標題的主要代碼 開始**/

Document doc = null;
try {
doc = Jsoup.connect(mUrl).get();
} catch (IOException e) {
e.printStackTrace();
}
titleString = doc.getElementsByClass(nav-title).text();
System.out.println(******* + titleString);

/**拼湊要顯示H5 開始**/ /**要想拼湊成功就必須把上面的網頁圖看懂,<>稱為一個Element 其會包含所有其中的內容**/
Elements content = doc.getAllElements();
String html= +

;
html+=content.get(2).toString()++; //此次的數字得自己寫個for迴圈列印每個element將數字替換
html+=content.get(16).toString();
/**拼湊要顯示H5 開始**/
view.loadDataWithBaseURL(mUrl, html, text/html, utf-8, null); //只要有這句就得聲明firstLink,不然一直重新整理介面

 

/**拿掉標題的主要代碼 開始**/
}

}

@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);

//標題列的操作
TextView actionBarTitle = (TextView)findViewById(R.id.actionbar_middle);
actionBarTitle.setText(titleString);
TextView leftTv = (TextView)findViewById(R.id.actionbar_left);
/**
* 必須設定以下屬性,不然左鍵頭不顯示
*/
Drawable drawable = getResources().getDrawable(R.drawable.btn_back);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
leftTv.setCompoundDrawables(drawable, null, null, null);
leftTv.setVisibility(View.VISIBLE);

}
}

以上的方法會造成嚴重的耗電腦記憶體,我測試的時候,導致一調試代碼,8G的記憶體電腦都吃緊,主要可能是 doc = Jsoup.connect(mUrl).get();導致。而且最終的效果是標題列拿掉了,可是標題列的地方是空白,也就是沒把布局給拿掉。IOS處理的方法是將WebView的Y座標上移一段,將WebView的高度增加上移的高度,可在android端設定後沒用,且設定後會出現WebView的地方不可觸碰。

以上只能拿掉標題,沒辦法拿掉標題的空白。

換另一種方式,在布局中下功夫,將布局設定為表單,使用標題列懸浮在最上層的結構,覆蓋網頁的標題列就達到了效果。上布局和整個代碼

 

<framelayout android:layout_height="match_parent" android:layout_width="match_parent" xmlns:actionbar="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">                                                        </framelayout>
上activity的整個代碼,不用上面的第二步代碼

 

 

package com.pitaya.daokoudai.view.activity.more;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.TextView;import com.pitaya.daokoudai.R;import com.pitaya.daokoudai.common.util.CommonUtil;import com.pitaya.daokoudai.common.util.ViewHolderUtils;/** *網站公告 */public class WebsiteNoticeActivity extends Activity{   private WebView webview;   /**    * 要訪問的url    */   private String mUrl;   private String titleString;   @Override   protected void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.activity_website_notice);      mUrl = getIntent().getStringExtra(url);      initWidget();   }   @Override   protected void onResume() {      super.onResume();   }   private void initWidget() {      webview= (WebView) findViewById(R.id.newer_guide_webview);      //設定WebView屬性,能夠執行Javascript指令碼      webview.getSettings().setJavaScriptEnabled(true);      //載入需要顯示的網頁      webview.setWebViewClient(new MyWebViewClient());      webview.loadUrl(mUrl);      //設定Web視圖      webview.getSettings().setJavaScriptEnabled(true);      webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);   }   @Override   //設定回退   //覆蓋Activity類的onKeyDown(int keyCoder,KeyEvent event)方法   public boolean onKeyDown(int keyCode, KeyEvent event) {      if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {         webview.goBack(); //goBack()表示返回WebView的上一頁面         return true;      }      return false;   }   //Web視圖   private class MyWebViewClient extends WebViewClient {      @Override      public boolean shouldOverrideUrlLoading(WebView view, String url) {         view.loadUrl(url);         return true;      }      @Override      public void onPageStarted(WebView view, String url, Bitmap favicon) {         super.onPageStarted(view, url, favicon);         CommonUtil.showProgressDialog(WebsiteNoticeActivity.this, getString(R.string.doing), true);      }      @Override      public void onPageFinished(WebView view, String url) {         super.onPageFinished(view, url);         CommonUtil.closeProgressDialog();         TextView actionBarTitle = ViewHolderUtils.find(WebsiteNoticeActivity.this, R.id.actionbar_middle);         actionBarTitle.setText(getResources().getString(R.string.more_item_notice));         TextView leftTv=ViewHolderUtils.find(WebsiteNoticeActivity.this,R.id.actionbar_left);         /**          * 必須設定以下屬性,不然左鍵頭不顯示          */         Drawable drawable = getResources().getDrawable(R.drawable.btn_back);         drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());         leftTv.setCompoundDrawables(drawable, null, null, null);         leftTv.setVisibility(View.VISIBLE);      }   }   public void onClick(View v) {      if (v.getId()==R.id.actionbar_left){         if (webview.canGoBack()) {            webview.goBack();         } else {            finish();         }      }   }}
使用覆蓋的方式完美解決,上述的第二步可能也可以,只是我在移動Y並增高時不能用,哎,android是沒有IOS簡單啊。android的天地就看各位了。打完,收工。

 

 


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.