Android WebView宽度

时间:2011-12-27 18:19:36

标签: android webview android-webview

我正在尝试控制WebView的宽度范围。 花了大约两整天。我还是离开了我开始的地方。 我遵循了以下文档: http://developer.android.com/guide/webapps/targeting.html http://developer.android.com/guide/practices/screens_support.html

我已经尝试过meta标签,css,WebView.setInitialScale。 有时这些更改会使WebView剪辑出现在屏幕中间,有时是三分之一。 当你认为你已经在疯狂中发现了一个可预测的模式时,你会发现布局响应是完全随机的。 是否有人知道在Android平台上是否有向前实施嵌入式HTML5网页的方法,还是仅仅是Android平台尚未准备好的内容?

2 个答案:

答案 0 :(得分:1)

我不确定你到底出了什么问题但这里有一些用于测试我的嵌入式WebViews的样板代码。我应该提一下,我主要针对Honeycomb(3.x),但你没有'明确指出:

以下是简单的示例布局:

<?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>

现在这里是活动支持者的代码:

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页面放入“assets”文件夹并使用以下命令加载:

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

或只嵌入一个像

这样的资源    

或者使用之前的相同加载URL语法将其指向您的服务器

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

......我希望这会有所帮助......

答案 1 :(得分:0)

我得出结论,修改WebView宽度的唯一方法是操纵html元标记中找到的target-densitydpi 通过将target-densitydpi设置为我的设备宽度,我可以使网页跨越整个屏幕宽度。 通过在运行时创建html文件,我可以使用检测到的设备宽度填充target-densitydpi。让人惊讶!!