質問

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

ここ数時間、WebView でブラウザと同じようにページを画面に合わせて拡大縮小する方法を見つけようとしましたが、うまくいきませんでした。これを達成する方法を見つけた人はいますか?

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

手がかりを持っている人はいますか?

ありがとう

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

役に立ちましたか?

解決

次のコードをロード完全に854x480ピクセルの画面でAndroid 2.2に私のためwebview内に収まるようにズームアウト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();
        }
    }
}

他のヒント

縦表示が完全にビューポートを満たしていなかった理由を

私は考え出しました。私の場合は少なくとも、それは、スクロールバーが常に表示されたためでした。上記のビューポートコードに加えて、これを追加してみてください。

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

このレイアウトのスペースを占有しないようにスクロールバーが発生し、Webページは、ビューポートを埋めることができます。

ホープ、このことができます。

それは、古い質問が、私は、詳細を追加してみましょう念のために私のようなより多くの人々がここに到着します。

ブライアンによって掲示優れた答えは、ジェリービーンで私のために働いていません。私も追加する必要があります:

browser.setInitialScale(30);

パラメータは、サイズ変更されたコンテンツは、WebViewの幅よりも小さいことを達成THA任意の割合とすることができます。次いで、(真)setUseWideViewPortは、WebViewの幅の最大含有量幅を拡張します。

画像やSWF動画の

//は "98%"

として "100%" として、幅と高さを使用します
mWebView2.getSettings().setJavaScriptEnabled(true);
mWebView2.getSettings().setLoadWithOverviewMode(true);
mWebView2.getSettings().setUseWideViewPort(true);
mWebView2.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
mWebView2.setScrollbarFadingEnabled(true);

私はこの答えのためのイメージのロードで働いていると私は彼らが、デバイスの幅に縮小することにしたいです。私は、ブライアンの答えのための行動は、それのような私としてはかなりではありません以下API 19(キットカット)よりバージョンで古い携帯電話のため、それを見つけます。これは、古い電話の一部の画像の周りの空白の多くを置きますが、私の新しい1で動作します。ここに私の代わりには、この答えの助けを借りて、次のとおりです。缶AndroidのWebViewのは、自動的に?巨大な画像のサイズを変更SINGLE_COLUMNが廃止されて、レイアウトアルゴリズムをを、それが動作し、私はそれが古いwebviewsでの作業に適しているように感じます。

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);
}

Web ビューは理解できても、画像のスケールがまだ合わない場合は、私が見つけた最良の解決策 (ここ) は単にドキュメントの先頭に次のものを追加していました。

<style>img{display: inline; height: auto; max-width: 100%;}</style>

その結果、すべての画像は Web ビューの幅に合わせて拡大縮小されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top