Android:如何在将数据加载到 WebView 时显示进度条?

     2023-03-25     175

关键词:

【中文标题】Android:如何在将数据加载到 WebView 时显示进度条?【英文标题】:Android: How can i show progress bar while loading data into WebView? 【发布时间】:2012-03-11 15:00:40 【问题描述】:

如何在将数据加载到我的 webview 时显示进度条? 我的代码:

public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);

    this.requestWindowFeature(Window.FEATURE_PROGRESS);
    getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); 
    this.setProgressBarVisibility(true);
    setContentView(R.layout.layout_article);
    WebView webview = (WebView) findViewById(R.id.webView);
    final Activity activity = this;
    webview.setWebChromeClient(new WebChromeClient() 
        public void onProgressChanged(WebView view, int progress) 
            activity.setProgress(progress * 100);
        
    );

    webView.loadUrl("http://google.com");

【问题讨论】:

您需要将上传移至单独的线程,以释放主 UI 线程的处理。您还必须决定是显示微调器还是显示进度条。 最好的方法是 Paresh 建议的,但您必须使用 WebViewClient ,使用此技术您不必查看从服务器获取了多少数据。跨度> 希望以下链接对您有所帮助:***.com/questions/9171510/… Android WebView progress bar的可能重复 【参考方案1】:

在调用 loadData() 函数之前,只需尝试显示 ProgressDialog 或将 ProgressBar 放入布局中。

WebViewClient 中,只需关闭()progressDialog 或使 ProgressBar 不可见。

例如:

// when finish loading page
public void onPageFinished(WebView view, String url) 
       if(mProgress.isShowing()) 
             mProgress.dismiss();
       

仅供参考,仅在您完成 Web 客户端设置后调用 loadData() 或 loadURL()。

查看此示例:Load WebView with ProgressDialog

【讨论】:

WebChromeClient class 没有onPageFinished() method,而是在WebViewClient 你还是写了WebClient它是WebViewClientdeveloper.android.com/reference/android/webkit/…, java.lang.String)【参考方案2】:

请尝试以下代码,

ProgressDialog progDailog = ProgressDialog.show( context,"Process ", "Loading Data...",true,true);

new Thread ( new Runnable()

     public void run()
     
      // your data loading code goes here
     
).start();

 Handler progressHandler = new Handler() 
 

     public void handleMessage(Message msg1) 
     

         progDailog.dismiss();
         
 

【讨论】:

【参考方案3】:
public class MainActivity extends AppCompatActivity 

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

        final ProgressBar progress = (ProgressBar) findViewById(R.id.progress);

        WebView webView = (WebView) findViewById(R.id.webview);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient() 
            @Override
            public boolean shouldOverrideUrlLoading(final WebView view, final String url) 
                return false;
            

            @Override
            public void onPageStarted(final WebView view, final String url, final Bitmap favicon) 
                progress.setVisibility(View.VISIBLE);
                super.onPageStarted(view, url, favicon);
            

            @Override
            public void onPageFinished(final WebView view, final String url) 
                progress.setVisibility(View.GONE);
                super.onPageFinished(view, url);
            
        );

        webView.loadUrl("http://google.com");
    

还有R.layout.activity_main:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_
     android:layout_>

    <WebView
        android:id="@+id/webview"
        android:layout_
        android:layout_ />

    <ProgressBar
        android:id="@+id/progress"
        android:layout_
        android:layout_
        android:visibility="gone"
        android:layout_centerInParent="true"/>
</RelativeLayout>

【讨论】:

【参考方案4】:

首先制作自定义 webview 类并像这样在 xml 上使用它,

 <com.app.ui.views.CustomWebView
        android:id="@+id/webView"
        android:layout_
        android:layout_
        >

    </com.app.ui.views.CustomWebView>

确保,高度不应该是固定的,应该是“wrap_content”

现在像这样制作自定义 webview 类,

 public class CustomWebView extends WebView 

    private ProgressBar progressBar;
    private Context context;
    private LinearLayout loaderLayout;

    public CustomWebView(Context context) 
    super(context);

    this.context = context;
    initProgressBar();

    loadUrlWithData();



public CustomWebView(Context context, AttributeSet attrs) 
    super(context, attrs);

    this.context = context;
    initProgressBar();



public CustomWebView(Context context, AttributeSet attrs, int defStyle) 
    super(context, attrs, defStyle);

    this.context = context;

    initProgressBar();



private void initProgressBar() 
    progressBar = new ProgressBar(context);
    progressBar.setIndeterminate(false);



private void setLoading(boolean isLoading) 

  if (isLoading) 

   progressBar.setVisibility(View.VISIBLE);

   loaderLayout = new LinearLayout(context);
   loaderLayout.setGravity(Gravity.CENTER);
   loaderLayout.setOrientation(LinearLayout.HORIZONTAL);

    LinearLayout.LayoutParams parentLayoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        loaderLayout.setLayoutParams(parentLayoutParams);

        LinearLayout.LayoutParams progressBarLayoutParams = new 
        LinearLayout.LayoutParams(75, 75);
        progressBar.setLayoutParams(progressBarLayoutParams);

        if (progressBar.getParent() != null) 
            ((ViewGroup) progressBar.getParent()).removeView(progressBar);
        
        loaderLayout.addView(progressBar);

        // add this loaderLayout to your parent view in which your webview is added

        else 

           progressBar.setVisibility(View.GONE);
        

  

  private void loadUrlWithData()
     setLoading(true);
     //Load your HTML data with url here

  

 //When the content will be loaded, the webview will change it's height
 @Override
protected void onSizeChanged(int w, int h, int ow, int oh) 
    super.onSizeChanged(w, h, ow, oh);

    if (h > 400) 
        setLoading(false);
    



【讨论】:

如何在将数据加载到 UIViewConroller Swift 时创建正在加载的 UIView

】如何在将数据加载到UIViewConrollerSwift时创建正在加载的UIView【英文标题】:HowtocreateaLoadingUIViewwhileloadingdatatoUIViewConrollerSwift【发布时间】:2015-04-0512:00:18【问题描述】:我正在尝试找出在将数据从数据库加载到UIViewController或将... 查看详情

Android:将 sqlite 数据库内容加载到 webview

】Android:将sqlite数据库内容加载到webview【英文标题】:Android:loadsqlitedatabasecontenttowebview【发布时间】:2012-11-2223:04:08【问题描述】:我有一个sqlite数据库,其中有我想在webview中加载的内容,,因为我想从数据库中选择并在网络... 查看详情

Webview从android后台加载数据?

】Webview从android后台加载数据?【英文标题】:Webviewloaddatafrombackgroundinandroid?【发布时间】:2016-11-2704:23:21【问题描述】:我的库将渲染一个带有html(JS)字符串的webview,我调用loaddata(htmlString)。之后,当图书馆用户想要显示它时... 查看详情

从原生android发送数据到webviewjavascript页面重新加载网页

...显示一个新的注册表单(javascript页面),包含3个页面在androidwebview上,然后在第4页上按钮点击javascript页面,我计算一些东西,并将一些数据从android传递到webview。问题是当我从android向webview页面发送数据时,它会改变webview的状... 查看详情

Android 将 html 数据加载到 chrome 自定义选项卡中

】Android将html数据加载到chrome自定义选项卡中【英文标题】:Androidloadhtmldataintochromecustomtabs【发布时间】:2017-03-2522:15:43【问题描述】:我想在我的应用中使用chrome自定义标签。我找到了如何将url中的数据加载到选项卡中,但我... 查看详情

从 Android 动态功能模块将资产加载到 WebView

】从Android动态功能模块将资产加载到WebView【英文标题】:LoadassetsintoWebViewfromAndroidDynamicFeatureModule【发布时间】:2020-02-0820:15:05【问题描述】:这个问题是关于当从GooglePlay加载应用程序时,将资产文件夹中的HTML内容加载到Android... 查看详情

在 WebView (Android) 中保留数据

】在WebView(Android)中保留数据【英文标题】:RetaindatainWebView(Android)【发布时间】:2010-11-2701:47:27【问题描述】:我使用WebView#loadDataWithBaseURL将各种生成的HTML/JS加载到Activity中。有没有办法在Activity生命周期中一次又一次地加载?... 查看详情

Android webview如何检测何时重新加载

】Androidwebview如何检测何时重新加载【英文标题】:Androidwebviewhowtodetectwhenreloads【发布时间】:2014-05-1013:42:51【问题描述】:您好,感谢您的关注!请在我的android应用程序中有一个WebView。我需要检测WebView何时重新加载URL。要明... 查看详情

将playbuzz加载脚本加载到android中的webview中

我试图在Playbuzz中加载WebView内容脚本的内容我找到了一种方法来加载包含脚本的网页的URL:StringurlPlayBuzz="http://www.jorgesys.com/playbuzzcontent.html";webview.loadUrl(urlPlayBuzz);但要求只加载脚本并显示playbuzz内容:Stringscript="<centerstyle="w 查看详情

Youtube 视频未加载到 android 的 webview 中

】Youtube视频未加载到android的webview中【英文标题】:Youtubevideoisnotloadedinwebviewinandroid【发布时间】:2017-12-3023:15:11【问题描述】:我想在网络视图中显示youtubeURL。但它没有加载到web视图中。这是我的代码。WebViewweb_view=(WebView)findV... 查看详情

如何将本地文件加载到webview

】如何将本地文件加载到webview【英文标题】:howtoloadlocalfileintowebview【发布时间】:2021-12-2714:01:39【问题描述】:我正在尝试将此文件加载到我的webview中,但它没有加载文件路径类似于/data/user/0/com.xyzapp.app/cache/temp_file.docx//这是... 查看详情

想要在 webview android 中完成 url 加载后将 webview 重定向到其他意图

】想要在webviewandroid中完成url加载后将webview重定向到其他意图【英文标题】:wanttoredirectwebviewtootherintentwhenurlloadinghasfinishedinwebviewandroid【发布时间】:2015-03-0609:41:53【问题描述】:当url加载完成时,我想将webview重定向到另一个... 查看详情

WebView 数据缓存 (Android)

】WebView数据缓存(Android)【英文标题】:WebViewdatacaching(Android)【发布时间】:2010-11-2503:06:47【问题描述】:我使用loadDataWithBaseURL将HTML数据加载到WebView再做一次执行下面的代码,而不是回到第一个page-整个应用程序退出。我在这里... 查看详情

如何在 Android WebView 中加载本地图像

】如何在AndroidWebView中加载本地图像【英文标题】:HowtoloadlocalimageinAndroidWebView【发布时间】:2017-07-0502:39:14【问题描述】:我正在尝试将存储在数据库中的包含图像的html字符串加载到WebView中。图像存储在内部存储器中。我给出... 查看详情

如何在 Android Webview 中加载网页之前注入 javascript?

】如何在AndroidWebview中加载网页之前注入javascript?【英文标题】:HowinjectjavascriptbeforethewebpageloadinginAndroidWebview?【发布时间】:2014-07-1809:53:46【问题描述】:真的需要有人帮帮我。我试图在页面加载到androidwebview之前将javascript注... 查看详情

Android如何在屏幕关闭/打开时防止webview重新加载?

】Android如何在屏幕关闭/打开时防止webview重新加载?【英文标题】:Androidhowtopreventwebviewreloadwhenthescreenisoff/on?【发布时间】:2018-03-2005:20:36【问题描述】:我看到了很多与我的问题相关的文档和文章。但我没有得到任何适当的解... 查看详情

Android WebView 不加载页面而不附加到 xml

】AndroidWebView不加载页面而不附加到xml【英文标题】:AndroidWebViewdoesnotloadapagewithoutattachingtoxml【发布时间】:2022-01-0501:08:46【问题描述】:我需要在后台加载动态生成的页面,然后获取结果html。我会为此使用WebView,但如果不附... 查看详情

从 Android Webview 获取 POST 数据

】从AndroidWebview获取POST数据【英文标题】:GetPOSTdatafromAndroidWebview【发布时间】:2014-05-1318:46:36【问题描述】:我在我的android应用程序中使用支付网关。我正在使用webview加载支付页面。我提供了一个指向支付网关的重定向URL,... 查看详情