安卓WebView无法滚动

4

我的Android WebView无法滚动。

XML代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/screen"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#87cefa"
android:gravity="left"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<WebView
    android:id="@+id/webView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerHorizontal="true" />

我正在使用普通的webview.loadUrl(url);函数加载网站,并有时使用webview.loadDataWithBaseURL("", htmlContent, "text/html", "UTF-8", "");函数,它们都会显示页面,但不能滚动。

初始化:

setContentView(R.layout.activity_main); webview = (WebView)this.findViewById(R.id.webView); webview.setVerticalScrollBarEnabled(true); webview.setHorizontalScrollBarEnabled(true);

加载:

            webview.loadUrl(url);
            [either one of them or the other]
    webview.loadDataWithBaseURL("", htmlContent, "text/html", "UTF-8", "");

也许将ScrollView设置为其父级? - Dejan
将webView放入线性布局中,并将方向设置为垂直,启用滚动。 - saopayne
可能是Android WebView可滚动的重复问题。 - Nathaniel D. Waggoner
都没有帮助 :( - Abascus
8个回答

5
我已经找到了解决方案,您只需要将WebView的定义放在“layout/content_my.xml”中,而不是“activity_my.xml”中。
<WebView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/webView"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

在MyActivity.java文件内部

    WebView webview = (WebView)findViewById(R.id.webView);
    webview.loadUrl("file:///android_asset/index.html");
    webview.setVerticalScrollBarEnabled(true);
    webview.setHorizontalScrollBarEnabled(true);

1
答案应该是什么,谢谢! - goelakash

3

不要使用wrap_content作为高度。如果您的WebView与其内容具有相同的高度,则显然没有任何内容可滚动,因为根据定义所有内容都适合(尽管由于您正在动态加载内容,这可能不是确切的情况)。请尝试将高度设置为match_parent或固定值。


3
听起来很合理,但并没有帮助,我仍然无法移动它。 - Abascus

1

我在相对布局中有其他元素,我将它们切换为不可见状态。这导致我的Webview无法滚动。我的解决方案是:

relativelayout.removeallchilds();
relativelayout.addchild(webview);
relativelayout.addchild(overlaybutton);

可能你需要使用以下代码:webview.getSettings().setBuiltInZoomControls(true);,同时我也使用了setContentView(webview); - Matthias Huber

1
你一定在使用一个滚动视图,移除那个滚动视图,你的网页视图就会开始滚动。

你的回答可以通过提供更多支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人能够确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community

0
我通过添加内容,成功让我的网页视图滚动。
simpleWebView = findViewById(R.id.simpleWebView);

//setting the webView client to a new webview client 
simpleWebView.setWebViewClient(new WebViewClient());

//and Enabling JavaScript
simpleWebView.getSettings().setJavaScriptEnabled(true);

我不建议启用JavaScript,因为使用setJavaScriptEnabled可能会在您的应用程序中引入XSS漏洞,这意味着如果您的网站容易受攻击,恶意JavaScript代码可以返回给您的用户。

当恶意代码在您的用户浏览器中执行时,攻击者可以危及其与您的应用程序的交互。

而且我目前不知道其他启用JavaScript的方法

以下是我使用的完整代码

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

    <WebView
        android:id="@+id/simpleWebView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

在 MyActivity.java 文件内部

simpleWebView.setWebViewClient(new WebViewClient());

simpleWebView.getSettings().setJavaScriptEnabled(true);

simpleWebView.setVerticalScrollBarEnabled(true);

simpleWebView.setHorizontalScrollBarEnabled(true);

0

我将此发布为评论,因为我认为这可能是一个重复的问题,但我建议您查看以下问题:

Android WebView Scrollable

其中提供了一些调用,我相信可以解决此问题。

另一个问题:

尝试将您的Webview从“Wrap Content”更改为某个特定高度。然后设置可滚动性。

尝试使用类似于300dp的值,然后进行调整。


没有帮助,结果还是一样的 :( - Abascus
还请查看文档:http://developer.android.com/reference/android/webkit/WebView.html - Nathaniel D. Waggoner
有道理,但我仍然无法滚动。 - Abascus

0

嘿,我在webview上遇到相同的问题。即使使用match_parent属性和非常简单的代码,它也无法滚动。

问题不在您的xml文件中,而是在Java文件中。在该活动的java文件中,覆盖onPause和onResume方法并包含此代码

@Override
protected void onResume() {
    super.onResume();
    browser.onResume();
}

@Override
protected void onPause() {
    super.onPause();
    browser.onPause();
}

非常重要的是,你需要暂停你的WebView,然后再恢复它。 希望这能解决你的问题。


这些需要API级别11。我在API级别10上遇到了这个问题。 - Michael

-1

添加这行代码,它就会开始工作。

webview.getSettings().setJavaScriptEnabled(true);

希望这能解决你的问题?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接