2011-12-27 26 views
0

WebViewの幅のスケールを制御しようとしています。 約2日を過ごした後。私はまだどこから始めたのですか? 私は、次のマニュアルに従っている: http://developer.android.com/guide/webapps/targeting.html http://developer.android.com/guide/practices/screens_support.htmlAndroid WebViewの幅

私はメタタグ、CSS、WebView.setInitialScaleで実験してきました。 変更によって、WebViewクリップが画面の中央に表示されることがあります。時には3分の1になることもあります。 あなたが狂気の中で予測可能なパターンを見つけたと思うとき、あなたはレイアウトの応答が全部ランダムであることを知ります。 Androidプラットフォームに埋め込みHTML5 Webページを実装する方法があるかどうか、誰かが知っていますか?それとも、Androidプラットフォームがまだ準備ができていないということだけですか?

+0

待機...何ですか?ページを拡大/縮小**しようとしていますか、またはwebviewの**幅**を設定していますか?私の経験では、HTML5とAndroid WebViewがうまく一緒に遊んでいます。 –

+0

私は実際にHTML5とAndroid WebViewsに悪い経験をしています。ページが大きすぎてビューに収まらない。 Android搭載HTML5には互換性の問題があります。 –

+0

同じですが、viewportタグのcontent-widthは機能しません – drogon

答えて

1

正確にどこが間違っていたのか分かりませんが、埋め込みWebViewをテストするための定型的なコードがあります。

ここでは、簡単なサンプルレイアウトです:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/FrameLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
</FrameLayout> 

今ここで活動バッカーのコードがありますので、指定した「私は、私は主にハニカム(3.xの)を標的とすることを言及する必要がありますが、あなたはdidntの

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.webkit.ConsoleMessage; 
import android.webkit.WebChromeClient; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.widget.FrameLayout; 
import android.widget.Toast; 

public class WebViewTestActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    final String TAG = "webview test"; 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main);  

    FrameLayout vg = (FrameLayout) findViewById(R.id.FrameLayout1); 
    WebView webView = new WebView(this); 

    vg.removeAllViews(); 
    vg.addView(webView); 

    WebSettings settings = webView.getSettings();   
    settings.setSupportZoom(false); 
    settings.setJavaScriptEnabled(true); 

    webView.setWebChromeClient(new WebChromeClient() { 
     @Override 
     public boolean onConsoleMessage(ConsoleMessage cm) { 

      Log.i(TAG, cm.messageLevel() + ": " + cm.message() + " -- From line " + cm.lineNumber() + " of " + cm.sourceId()); 

      return true; 
     } 
    }); 

    webView.addJavascriptInterface(new Object() { 

     @SuppressWarnings("unused") 
     public void foo() { 
      Log.i(TAG, "----- FOO CALLED -----"); 
      Toast.makeText(WebViewTestActivity.this, "foo called", Toast.LENGTH_LONG).show(); 
     } 

    }, "android"); 

    String html = "<!DOCTYPE html><html><body style=\"background:black;color:white;padding:20px;\"><a href=\"javascript:android.foo()\">CLICK ME!</a><div><label>HTML5 number input: <input type=number /></label></div></body></html>"; 
    webView.loadDataWithBaseURL("http://yourOptionalBaseUrl.com/", html, "text/html", "utf-8", null); 
}   
} 

...これで、埋め込みhtml5ページが必要です。また、あなたのhtmlページは、あなたの「資産」フォルダに入れて使用してそれを読み込むことができます。

webView.loadUrl("file:///android_asset/page.html"); 

または

またはちょうど同じ負荷URLを使用して、それをサーバにポイントのように1つだけのリソースを埋め込みます

webView.loadUrl("http://www.yourpage.com/android?param=custom"); 

前から構文...私はこれが役に立てば幸い...

+0

例のおかげでckozl ターゲットデバイスは2.3.3です。アプリケーションレベル10 私はあなたの例を試しました。スケールはまだ同じです。 すべてが伸びた100% sddiskの代わりにassetフォルダを使用すると、すべてのcssおよびjs参照が壊れています。 Btw。 WebViewではなくFrameLayoutを使用する特別な理由はありますか? – DevNull

+0

待って...何?あなたは、ページを拡大縮小しようとしているのですか、またはwebviewの幅を設定していますか? 私は自分の携帯デバイスの幅全体にページを伸ばそうとしています。私のノートパソコンのFF、Chrome、IE9と同じように、 私はちょうどhtmlにこれを働かせることができれば嬉しいことになります。 残念ながら、私はimgの約4分の1しか見ることができません。残りは切り取られます。 コンテンツの幅を正確な値に指定していない限り、これは何も行われません。 – DevNull

+0

プレースホルダとして 'FrameLayout'を使用しましたが、コードの目的はもともと動的に作成された' WebView'のものをテストするために使用されました。 – ckozl

0

私は唯一の方法トンという結論に達しましたo WebViewの幅を変更するhtmlメタタグにあるtarget-densitydpiを操作する target-densitydpiを自分のデバイスの幅に設定すると、Webページが画面の幅全体に広がるようになります。 実行時にhtmlファイルを作成すると、検出されたデバイスの幅でtarget-densitydpiを埋め込むことができます。 Yikes !!