Add loading indicator/progress bar to Phonegap Android splashscreen

非 Y 不嫁゛ 提交于 2019-12-03 06:23:54

I think I've found a solution (not a full solution, but a spinner solution). Inside DroidGap subclass you should add this line:

super.setStringProperty("loadingDialog", "Wait, Loading...");

Here is my full example

public class MainActivity extends DroidGap {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        super.setIntegerProperty("splashscreen", R.drawable.splash);
        // Display a native loading dialog.  Format for value = "Title,Message".  
        // (String - default=null)
        super.setStringProperty("loadingDialog", "Wait,Loading Demo...");

       super.loadUrl("file:///android_asset/www/index.html");
      }
}

There are several properties you could set up in this section, please see this code: https://svn.apache.org/repos/asf/incubator/callback/phonegap-android/branches/WebSockets/framework/src/com/phonegap/DroidGap.java

jkanini

I finally managed to add a progress bar to a PhoneGap webView which will show the progress (percentage) of the page load. Hope this helps you

As this other answer explains, appView is located inside a LinearLayout. The protected (and therefore inherited) variable root references this LinearLayout. You can add your (whatever) native Views to this variable.

Here is how I did:

  1. Create a layout in your res/layouts/

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <ProgressBar
            android:id="@+id/progressBar1"
            style="@android:style/Widget.ProgressBar.Horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:maxHeight="10dip"
            android:minHeight="10dip" />
    
    </LinearLayout>
    
  2. Follow all the steps you would normally follow for adding a WebView progress bar:

    final Activity activity = this;
    private ProgressBar progessBar1;
    
  3. Add the layout you created:

    View footer = View.inflate(getContext(), R.layout.mainshop, null);
    root.addView(footer);
    

    If you add it after calling super.loadURL(...); it will be displayed at the bottom. If you add it before, the layout will be displayed before the appView.

  4. After that you simply add this:

    progessBar1 = (ProgressBar) findViewById(R.id.progressBar1);
    
    this.appView.setWebChromeClient(new WebChromeClient() {
    
            public void onProgressChanged(WebView view, int progress) { 
                activity.setProgress(progress * 1000);
                if(progress < 100 && progessBar1.getVisibility() == ProgressBar.GONE) {
                    progessBar1.setVisibility(ProgressBar.VISIBLE);
                }
                progessBar1.setProgress(progress);
                if(progress == 100) {
                    progessBar1.setVisibility(ProgressBar.GONE);
                }
    
                Log.d("Progress", progress+"");
    
             }
        });
    

Cheers!

Titouan de Bailleul

I know you can easily add a loading indicator to your splash screen by setting the ShowSplashScreenSpinner option to YES in your PhoneGap configuration file (PhoneGap.plist on iOS)

It shows a spinner in the middle of the splash screen while the app is loading

Edit: This only works with iOS.

Stop using a Activity that extends DroidGap, create a regular Android activity and put org.apache.cordova.CordovaWebView in a layout file. It will give you much more flexibility.

http://docs.phonegap.com/en/2.2.0/guide_cordova-webview_android.md.html#Embedding%20Cordova%20WebView%20on%20Android

If you use jquery-mobile you can do:

$.mobile.showPageLoadingMsg();
$('.ui-loader h1').html('<h1>Saving ... <span id="ui-loading-extra"></span>');

Then in onProgressChanged do:

$('#ui-loading-extra').text(progress  + '%');
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!