2日間調査しましたが、インターネット上のどこにも同様の問題は見つかりませんでした。
メイン アクティビティから、android_asset フォルダーに HTML ページ (about.html) を表示する Web ビューを含む新しいアクティビティを開こうとしています。
新しいアクティビティ (test.java) を起動して Web ビューを適切に表示することはできますが、Web ページのコンテンツが表示されません。Web ビューの垂直スクロールバーも表示されます (ページ コンテンツが比較的長いため)。ページを上下にスクロールすることはできますが、コンテンツは表示されません。
package com.example.test;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;
public class test extends Activity {
private TextView apppagetitle;
private WebView browser_rn;
@Override
public void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
setContentView(R.layout.test);
browser_rn=(WebView)findViewById(R.id.webkit);
browser_rn.getSettings().setJavaScriptEnabled(true);
browser_rn.getSettings().setPluginsEnabled(true);
browser_rn.setScrollBarStyle(0);
final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
apppagetitle=(TextView)findViewById(R.id.apppagetitle);
browser_rn.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}
public void onPageFinished(WebView view, String url) {
apppagetitle.setText(browser_rn.getTitle());
}
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
if (!isInternetOn()) {
alertDialog.setTitle("Connection Error");
alertDialog.setMessage("You need to be connected to the internet.");
} else {
alertDialog.setTitle("Error");
alertDialog.setMessage(description);
}
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
return;
}
});
alertDialog.show();
}
});
browser_rn.loadUrl("file:///android_asset/about.html");
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
browser_rn.clearCache(true);
browser_rn.clearHistory();
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
奇妙なのは、webview.gettitle() を呼び出すと、新しいアクティビティ (test.java) は Web ページのタイトルを正常に取得してテキストビューに表示できるのに、HTML コンテンツが Web ビューにレンダリングされないことです。スクロールバーのある空白の画面しか表示されません。原因はブール値 "shouldOverrideUrlLoading" ではないかと考えています。
アップデート:
返信ありがとうございます。
テスト.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res/com.example.test"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/green"
>
<TextView
android:id="@+id/apppagetitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:text="Odd News"
android:textSize="25px"
android:padding="10px"
/>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<WebView
android:id="@+id/webkit"
android:layout_width="fill_parent"
android:layout_height="0px"
android:layout_weight="1"
/>
</LinearLayout>
</LinearLayout>
について以下のように簡単です。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>About</title>
</head>
<body>
<h3 style="color:#0066dd">About</h3>
<p>Some text here...</p>
</body>
</html>
そうそう、先ほど同じコードで、携帯電話でアプリを強制停止して再起動すると about.html が表示されることがあることを言い忘れていました。しかし、その後の起動では表示されません。about.html が正常に表示され、メイン アクティビティに戻るために戻るボタンを押しても、メイン アクティビティからアクティビティを再起動すると再び消えてしまいます。よくわかりませんが、正しく実行していないのは「shouldOverrideUrlLoading」であるという強い予感がします。
ベストアンサー1
指定された URL を にロードしようとしないでくださいshouldOverrideUrlLoading
。また、あなたのケースでは、そこから true を返さないでください。実際、あなたがしようとしていることを見ると、それをオーバーライドする必要はまったくないはずです。
からtrueを返すことは、shouldOverrideUrlLoading
WebViewに次のことを行うように指示します。ない指定された URL をロードします。WebView に再度ロードを開始するように指示する操作によって、WebView 内で何らかの内部ループが発生する可能性があり、これが奇妙な動作の原因であると思われます。