2

我在 Android (4.2) 中有一个WebView ,它使用 javascript (放置在 assets 文件夹中)加载本地 html 。

我的问题是,我无法在我的 WebView 中滚动。我通过类似的 SO 问题尝试了很多事情和建议,但没有任何效果。

我的 Html 只是一个简单的 div-Tag,Kinetic-js 框架使用它在上面绘制图片和一些画布。

XML 布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="@dimen/text_size_smed_16sp"
            android:textColor="@android:color/white"
            android:text="@string/ui_floor_plan_building_textView" />

        <Spinner android:id="@+id/floor_plan_building_spinner"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="@dimen/text_size_smed_16sp"
            android:textColor="@android:color/white"
            android:text="@string/ui_floor_plan_level_textView" />

        <Spinner android:id="@+id/floor_plan_level_spinner"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

        <AutoCompleteTextView android:id="@+id/floor_plan_room_autoTextView"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:completionThreshold="1"
            android:hint="@string/ui_floor_plan_autocomplete_hint"
            android:inputType="number"
            android:imeOptions="actionSearch" />

    </LinearLayout>

     <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

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

     </LinearLayout>

</LinearLayout>

Java onCreate:

    this.webView = (WebView) findViewById(R.id.floor_plan_webView);
    this.webView.getSettings().setJavaScriptEnabled(true);

    this.webView.getSettings().setLoadWithOverviewMode(true);
    this.webView.getSettings().setUseWideViewPort(true);

    this.webView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
    this.webView.setScrollbarFadingEnabled(false);
    this.webView.setVerticalScrollBarEnabled(true);
    this.webView.setHorizontalScrollBarEnabled(true);

    this.webView.getSettings().setSupportZoom(true);
    this.webView.getSettings().setLightTouchEnabled(true);

    this.webView.setWebViewClient(new WebViewClient(){

        private boolean initialLoad = true;

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            if(this.initialLoad){
                this.initialLoad = false;
                drawFloorPlan();
            }
        }

    });
    this.webView.loadUrl(PATH_FLOOR_PLAN_HTML);

HTML 文件:

    <html>
        <head>
        <title>Floor Plans</title>

        <meta charset="UTF-8">

        <script type="text/javascript" src="floor_plan.js"></script>
        <script type="text/javascript" src="kinetic-v4.0.5.js"></script>
    </head>

    <body onload="initialize()" style="margin:0px; padding:0px; width:100%; height:100%">
        <div id="container"></div>
    </body>

</html>

观察: 当显示的图像(html 文件)小于 webview 时,只要触摸事件在显示的 html 之外,就可以垂直和水平滚动。通常我的图片非常大,所以根本没有机会触摸外部和滚动。

我不确定它是 WebView 本身还是 html 页面的问题。有什么想法可以让滚动恢复工作吗?

我非常感谢每一个答案=)提前致谢!

4

1 回答 1

3

我找到了一个解决方案

我实现了自己的 onTouchListener 并自己进行滚动。从另一个 SO 问题/答案(Android: Scrolling an Imageview)中得到了这个想法

认为这可能对其他人有帮助,因为它在 WebView 中似乎有一些错误,其中包含从 file:/// 加载的某些 html 文件...

于 2012-11-21T11:44:01.933 回答