标签: android-webview

如何防止滚动视图在加载数据后滚动到webview?

所以我有一个引人入胜的问题.尽管我不是手动或以编程方式滚动我的视图,但我的WebView会在其内部数据加载后自动滚动到.

我在viewpager中有一个片段.当我第一次加载寻呼机时,它按预期工作,并显示所有内容.但是一旦我"翻页",数据就会加载,WebView会弹出到页面顶部,将视图隐藏在它上面,这是不可取的.

有谁知道如何防止这种情况发生?

我的布局看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/background" >

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

        <TextView
            android:id="@+id/article_title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="2dp"
            android:text="Some Title"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="@color/article_title"
            android:textStyle="bold" />

        <LinearLayout
            android:id="@+id/LL_Seperator"
            android:layout_width="fill_parent"
            android:layout_height="1dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="5dp"
            android:background="@color/text"
            android:orientation="horizontal" >
        </LinearLayout>

        <WebView
            android:id="@+id/article_content"
            android:layout_width="match_parent"
            android:layout_marginRight="10dp"
            android:layout_marginLeft="10dp"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/article_link"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginTop="5dp"
            android:layout_marginRight="10dp"
            android:layout_marginLeft="10dp"
            android:text="View Full Article"
            android:textColor="@color/article_title"
            android:textStyle="bold" />
    </LinearLayout>

</ScrollView>
Run Code Online (Sandbox Code Playgroud)

我也没注重任何事情.默认情况下,它似乎在加载后自动滚动到WebView.我该如何防止这种情况?

android android-layout android-webview android-scrollview android-viewpager

105
推荐指数
4
解决办法
4万
查看次数

Android Webview - 网页应该适合设备屏幕

我已尝试以下内容根据设备屏幕大小调整网页.

mWebview.setInitialScale(30);
Run Code Online (Sandbox Code Playgroud)

然后设置元数据视口

<meta name="viewport" content="width=320, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=0;"/>
<meta name="viewport" content="width=device-width, target-densityDpi=medium-dpi"/>
Run Code Online (Sandbox Code Playgroud)

但没有任何作用,网页没有固定到设备屏幕大小.

谁能告诉我怎么弄这个?

scaling android webview android-webview

98
推荐指数
13
解决办法
22万
查看次数

在android webview中全屏播放HTML5视频

好吧,我已经好几天了,如何在android WebView上以全屏模式显示HTML5视频.

我设法在我的网页浏览中播放HTML5视频.在全屏模式下显示视频时出现问题.

正如我所知,android有两种处理<video>标签的方法:

  1. 在Android版本<= 2.3.3上,onShowCustomView方法被触发,我可以拥有VideoView实例,并在视频完成时设置监听器,设置控制器等.到目前为止一切顺利.

  2. 在ICS(可能是3.0及更高版本)上,看起来<video>以不同的方式处理.播放HTML5视频时,onShowCustomView未在正常模式下调用 - 看起来WebView内部有一个内部业务播放视频,并显示<video>标签中定义的所有控件 - I不能以任何方式访问它.实际上,如果视频是在正常模式下播放的,那么这是正常的,因为控件在那里并且正在工作.

这导致了一个大问题:当以全屏模式显示视频时,正在调用onShowCustomView - 但在ICS上,"view"参数不是VideoView的实例.

我设法发现该实例是VideoSurfaceView,一个HTML5VideoFullScreen类的私有内部类.我们访问这个内部类的唯一方法是通过反射.

在查看了这个类的GrepCode之后,我了解到与VideoView不同,HTML5VideoFullScreen $ VideoSurfaceView不包含我可以监听其事件或访问其控件的MediaPlayer实例.我唯一能做的就是把这个VideoSurfaceView原样放在一个全屏布局中而不用控制它.

底线 - 当以全屏显示视频时,我不知道视频何时结束,其控件未显示 - 这非常令人伤心.我无法获得关闭全屏的触发器.

我尝试了几个不成功的解决方法:

  1. 反思:我试图从内部类VideoSurfaceView到达HTML5VideoFullScreen实例,该实例包含一个MediaPlayer成员.我没有设法得到它,我不确定这是否可行(ViewSurfaceView不保存其所有者的实例).

  2. 通过Javascript(例如onended)注册视频事件,并通过JavascriptInterface处理我在JAVA中需要的东西:我发现这个解决方案不可靠,因为在这样做时我遇到了另一个问题:<video>标签可以嵌套在一个.iframe源不是我的,我无法获取其内容(getElementById或getElementsByTagName [i]为空) - 这意味着,我无法访问iframe中的<video>元素.

我仍在寻找解决方案,关于这个问题的报道很少.有人设法解决它吗?非常感谢帮助!

VideoView类:这里(有MediaPlayer)

HTML5VideoFullScreen $ VideoSurfaceView类:这里(没有MediaPlayer)

android android-webview html5-video

92
推荐指数
3
解决办法
13万
查看次数

使用android WebView加载现有的.html文件

我确实尝试过使用Google代码和其他资源的示例,演示WebView,但是当我尝试在我自己的代码中执行此操作时,它对我不起作用.

我想加载myfile.html我放在assets文件夹中,并使用:

private WebView myWebView;

myWebView.loadUrl("file:///android_assets/myfile.html");
Run Code Online (Sandbox Code Playgroud)

在模拟器上显示错误

file:///android_assets/myfile.html无法加载网页:找不到请求的文件. /android_assets/myfile.html

当我把该文件放到文件res/raw/夹并使用:

myWebView.loadUrl("file:///android_res/raw/myfile.html");
Run Code Online (Sandbox Code Playgroud)

然后只有模拟器android 2.2 API级别8可能加载文件,其他旧版本显示相同的错误.我错过了什么吗?

有没有办法在适用于所有API版本的应用程序包中加载现有的.html文件?

android android-assets android-webview

85
推荐指数
4
解决办法
13万
查看次数

向WebView资源请求添加自定义标头 - android

我需要为来自WebView的每个请求添加自定义标头.我知道loadURL有参数extraHeaders,但这些只适用于初始请求.所有后续请求都不包含标头.我查看了所有覆盖内容WebViewClient,但没有任何内容允许向资源请求添加标头 - onLoadResource(WebView view, String url).任何帮助都会很精彩.

谢谢,雷

java android webkit android-webview

85
推荐指数
6
解决办法
10万
查看次数

如何从WebView获取网页内容?

在Android上,我有一个WebView显示页面.

如何在不请求页面的情况下获取页面源?

似乎WebView应该有某种getPageSource()方法返回一个字符串,但唉它没有.

如果我启用JavaScript,那么在此调用中放入适当的JavaScript以获取内容是什么?

webview.loadUrl("javascript:(function() { " +  
    "document.getElementsByTagName('body')[0].style.color = 'red'; " +  
    "})()");  
Run Code Online (Sandbox Code Playgroud)

android android-webview

81
推荐指数
4
解决办法
10万
查看次数

在webview中禁用滚动?

到目前为止,我只是一名iPhone开发人员,现在我决定给Android一个旋转.我在Android上无法弄清楚的是如何以编程方式阻止滚动WebView

类似于iPhone预防onTouchMove活动的东西会很棒!

android android-webview android-scrollbar android-scroll

81
推荐指数
6
解决办法
13万
查看次数

Android WebView未加载HTTPS URL

public void onCreate(Bundle savedInstance)
{       
    super.onCreate(savedInstance);
    setContentView(R.layout.show_voucher);
    webView=(WebView)findViewById(R.id.webview);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setBuiltInZoomControls(true);
    String url ="https://www.paymeon.com/Vouchers/?v=%C80%8D%B1x%D9%CFqh%FA%84%C35%0A%1F%CE&iv=%25%EE%BEi%F4%DAT%E1"
    //webView.loadUrl(url); // Not Working... Showing blank
    webView.loadUrl("http://www.yahoo.com"); // its working    
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在WebBView中加载URL时,它只显示一个空白屏幕.如果我加载Google.com或yahoo.com,它运行正常.

https android webview android-webview

79
推荐指数
9
解决办法
11万
查看次数

WebView方法对同一线程错误

我有一个android程序(webview中的Java + html).我可以从javascript调用Java代码.但另一种方式停止工作(在eclipse中更新后).

所以这就是我想要做的

  • 制作一个webview(工作)
  • 在javascript中调用AndroidFunction.test(); (工作)
  • java test()函数调用webView.loadUrl("javascript:helloBack()"); (!不再工作了)

我试图让它在MainActivity中使用WebView,但它没有用.

MainActivity.java

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final WebView webView = (WebView)findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebChromeClient(new WebChromeClient());
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);

        javascr = new Javascript(this, webView);
        webView.addJavascriptInterface(javascr, "AndroidFunction");
        webView.loadUrl("file:///android_asset/www/index.html");

        ....
}
Run Code Online (Sandbox Code Playgroud)

Javascript.java

public class Javascript {   
    Context cont;
    WebView webView;

    Javascript(Context c, WebView w) {
        cont = c;
        webView = w;
    }

    // function called in the javascript by AndroidFunction.test();
    public void test() {
          // Breaking point!!!
        webView.loadUrl("javascript:helloBack()");
    } …
Run Code Online (Sandbox Code Playgroud)

javascript android android-webview

78
推荐指数
3
解决办法
4万
查看次数

Android - 防止在Rotate上重新加载WebView

当我旋转屏幕时,WebView会重新加载整个页面.我不能拥有这个,因为我的一些内容包含动态/随机材料.目前,当旋转屏幕时,会从loadUrl()方法重新加载原始URL.

知道我的代码有什么问题吗?

MainActivity.java

package com.mark.myapp;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {

    WebView web;
    String webURL = "http://www.google.co.uk/";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState != null)
            ((WebView)findViewById(R.id.web)).restoreState(savedInstanceState);

        web = (WebView) findViewById(R.id.web);
        web.getSettings().setJavaScriptEnabled(true);
        web.loadUrl(webURL);
        web.setPadding(0, 0, 0, 0);
        web.getSettings().setLoadWithOverviewMode(true);
        web.getSettings().setUseWideViewPort(true);
        web.getSettings().setSupportZoom(true);
        web.getSettings().setBuiltInZoomControls(true);

        web.setWebViewClient(new HelloWebViewClient());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    private class HelloWebViewClient extends WebViewClient {
        public boolean …
Run Code Online (Sandbox Code Playgroud)

java android android-webview

76
推荐指数
8
解决办法
6万
查看次数