0

我的应用程序首先在 onCreate 上将网页加载为 WebView。我应该将它扩展到一个新线程,因为它可能会挂起一点吗?或者至少是一种显示页面仍在加载的方法。它偶尔会显示为白色几秒钟。

另外,有没有办法防止页面在方向改变时重新加载?

4

3 回答 3

1

webview 自己处理线程,所以你不必担心。

您可以在页面开始和完成加载时注册回调。设置进度条或任何您想要的都由您决定。有关详细信息,请参阅WebChromeClient.onProgressChanged()。这是一个很好的帖子,提供了一些细节。

您可以在清单中添加一些内容来告诉系统您不关心方向变化。将以下内容添加到您的活动定义中,

android:configChanges="orientation"

另一种选择是将您的应用程序锁定到一个方向或另一个方向,

android:screenOrientation="portait"
于 2013-10-09T16:58:29.787 回答
0

广告 1. 我没有(也不应该)在单独的线程中这样做。

WebView进度条 - Android WebView 进度条

广告 2.您可以通过在清单中添加android:screenOrientation="portait""landscape"声明来阻止方向更改。Activity

于 2013-10-09T16:57:01.547 回答
0

您应该使用进度对话框。显示对话框,直到将网页加载到 WebView。

public final class MyWebview extends Activity {

 private static final int DIALOG2_KEY = 1;
 private ProgressDialog pd = null;
 private static final String  AmitBlog="YOUR URL";
 private WebView webView;
 @Override
 protected void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  setContentView(R.layout.main);
  pd = new ProgressDialog(this);
  webView = (WebView) findViewById(R.id.webview);
  webView.setWebViewClient(new HelpClient());
  webView.getSettings().setBuiltInZoomControls(true);

  /** Showing Dialog Here */
  showDialog(DIALOG2_KEY);
 }

 @Override
 protected void onResume() {
                super.onResume();
  LoadView();
 }

 private void LoadView()
 {
  webView.loadUrl(AmitBlog);
 }

 /** Its very important while navigation hardware back button if we navigate to another link .Its like a Stack pop of all the pages you visited in WebView */
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_BACK) {
   if (webView.canGoBack()) {
    webView.goBack();
    return true;
   }
  }
  return super.onKeyDown(keyCode, event);
 }

/** WebViewClient is used to open other web link to the same Activity. */

  private final class HelpClient extends WebViewClient {
  @Override
  public void onPageFinished(WebView view, String url) {
   setTitle(view.getTitle());

   /** Dismissing Dialog Here after page load*/
   dismissDialog(DIALOG2_KEY);
  }

  @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
   if (url.startsWith("file")) {
    return false;
   } else{
    view.loadUrl(url);
    return true;
   }
  }
 }

 @Override
 protected Dialog onCreateDialog(int id) {
  switch (id)
  {
  case DIALOG2_KEY:
  {
   pd.setMessage(getResources().getString(R.string.Loading));
   pd.setIndeterminate(true);
   pd.setCancelable(false);
   return pd;
  }
  }
  return null;
 }
}
于 2013-10-09T16:57:23.667 回答