77

WebViewをAndroidブラウザと同様の動作にしようとしています。ブラウザは、画面に幅を合わせようとする方法ですべてのページを開きます。ただし、WebViewのデフォルトの動作は、100%ピクセルスケールで開始するため、左上隅でズームインを開始します。

私はここ数時間、WebViewでページをブラウザのように画面に拡大縮小する方法を見つけようとしていましたが、運がありません。誰かがこれを達成する方法を見つけましたか?

setLoadWithOverviewModeという設定が表示されますが、何も実行されていないようです。また、setInitialScaleを試してみましたが、さまざまな画面サイズとWebページサイズで、ブラウザーのスケーリングほど適切ではありません。

誰かリードがありますか?

ありがとう

編集:ブライアンの方法は、電話が横向きであるが縦向きではない場合に機能するようです。縦向きでは近くにありますが、それでもページの画面全体に収まりません。私はこの賞金を、任意の向きや画面サイズでページをページの幅に合わせるための最初のズームを確実に取得する方法があることを願って始めました。

4

9 に答える 9

162

webview次のコードは、Android 2.2 の 854x480 ピクセルの画面に収まるように完全に縮小された Google ホームページのデスクトップ バージョンを読み込みます。デバイスの向きを変えて、縦向きまたは横向きでリロードすると、毎回ページ幅がビュー内に完全に収まります。

BrowserLayout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

     <WebView android:id="@+id/webview"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent" />
</LinearLayout>

Browser.java:

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;

public class Browser extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.BrowserLayout);

        String loadUrl = "http://www.google.com/webhp?hl=en&output=html";

        // initialize the browser object
        WebView browser = (WebView) findViewById(R.id.webview);

        browser.getSettings().setLoadWithOverviewMode(true);
        browser.getSettings().setUseWideViewPort(true);

        try {
            // load the url
            browser.loadUrl(loadUrl);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
于 2010-12-01T07:44:36.030 に答える
20

縦向きのビューがビューポートを完全に埋めていない理由がわかりました。少なくとも私の場合は、スクロールバーが常に表示されていたためです。上記のビューポート コードに加えて、これを追加してみてください。

    browser.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    browser.setScrollbarFadingEnabled(false);

これにより、スクロールバーがレイアウト スペースを占有せず、Web ページがビューポートを埋めることができます。

お役に立てれば

于 2011-07-06T02:56:14.340 に答える
12

古い質問ですが、私のような人がここに来る場合に備えて、詳細を追加させてください。

ブライアンによって投稿された優れた回答は、ジェリービーンズでは機能していません。私も追加する必要があります:

browser.setInitialScale(30);

パラメータは、サイズ変更されたコンテンツがWebビューの幅よりも小さいことを達成する任意のパーセンテージにすることができます。次に、setUseWideViewPort(true)は、コンテンツの幅をWebビューの幅の最大値まで拡張します。

于 2013-02-05T11:04:39.763 に答える
7

広いビューポートを使用してみてください:

 webview.getSettings().setUseWideViewPort(true);
于 2010-09-28T03:21:25.907 に答える
3

//画像と SWF ビデオの場合、幅を「100%」、高さを「98%」として使用します

mWebView2.getSettings().setJavaScriptEnabled(true);
mWebView2.getSettings().setLoadWithOverviewMode(true);
mWebView2.getSettings().setUseWideViewPort(true);
mWebView2.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
mWebView2.setScrollbarFadingEnabled(true);
于 2011-06-28T06:23:28.300 に答える
1

この回答の画像を読み込んでいますが、デバイスの幅に合わせて拡大縮小したいと考えています。API 19 (KitKat) より前のバージョンの古い携帯電話の場合、ブライアンの回答に対する動作は、私が気に入っているほどではありません。古い携帯電話では一部の画像の周りに多くの空白が表示されますが、新しい携帯電話では機能します。この回答の助けを借りて、これが私の代替手段です: AndroidのWebViewは自動的に巨大な画像のサイズを変更できますか? レイアウト アルゴリズムSINGLE_COLUMNは非推奨ですが、動作し、古い Web ビューでの作業に適しているように感じます。

WebSettings settings = webView.getSettings();

// Image set to width of device. (Must be done differently for API < 19 (kitkat))
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
    if (!settings.getLayoutAlgorithm().equals(WebSettings.LayoutAlgorithm.SINGLE_COLUMN))
        settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
} else {
    if (!settings.getLoadWithOverviewMode()) settings.setLoadWithOverviewMode(true);
    if (!settings.getUseWideViewPort()) settings.setUseWideViewPort(true);
}
于 2016-02-06T06:58:28.853 に答える