Добавить индикатор загрузки / индикатор выполнения в Phonegap Android splashscreen

у меня есть проект PhoneGap 1.4.1 / jQueryMobile 1.0.1/Android, который показывает res/drawable / splash.png просто отлично, и splashscreen уходит после загрузки WebView.

Я хотел бы добавить какой-то процентный текст индикатора прогресса на splashscreen, но до сих пор не удалось.

у меня был успех с этим в прошлом, используя обычный webview, например:

myWebView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        myLoadingView.setVisibility(View.GONE);
        myWebView.setVisibility(View.VISIBLE);
    }
});
myWebView.loadUrl(...);

но все это было лишь макет с прогрессом текст индикатора и фоновое изображение, которое будет обновляться с помощью:

myWebView.setWebChromeClient(new WebChromeClient() {
    public void onProgressChanged(WebView view, int progress) {
        myLoadingView.setText(progress+"%");
    }
});

кто-нибудь знает, как я могу добавить эту функциональность в существующую реализацию PhoneGap, или знает, как я могу заменить PhoneGap на собственную реализацию?

5 ответов


Я думаю, что нашел решение (не полное решение, а решение spinner). Внутри подкласса DroidGap вы должны добавить следующую строку:

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

вот мой полный пример

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");
      }
}

в этом разделе можно настроить несколько свойств, см. Этот код: https://svn.apache.org/repos/asf/incubator/callback/phonegap-android/branches/WebSockets/framework/src/com/phonegap/DroidGap.java


мне, наконец, удалось добавить индикатор выполнения в PhoneGap webView, который покажет прогресс (процент) загрузки страницы. Надеюсь, это поможет вам

As этот ответ объясняет, appView находится внутри LinearLayout. Защищенная (и, следовательно, унаследованная) переменная root ссылается на this LinearLayout. Вы можете добавить свой (любой) родной Views для этой переменной.

вот как я сделал:

  1. создать макет в ваш РЭС/макеты/

    <?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. выполните все шаги, которые вы обычно выполняете для добавления индикатора выполнения WebView:

    final Activity activity = this;
    private ProgressBar progessBar1;
    
  3. добавьте созданный макет:

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

    если вы добавите его после вызова super.loadURL(...); он будет отображаться внизу. Если вы добавите его раньше, макет будет отображаться перед appView.

  4. после этого вы просто добавляете это:

    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+"");
    
             }
        });
    

Ура!


Я знаю, что вы можете легко добавить индикатор загрузки на ваш заставки на задание ShowSplashScreenSpinner опция да в файле конфигурации PhoneGap (PhoneGap.plist на iOS)

Это показывает счетчик в середине заставки во время загрузки приложения

Edit: это работает только с iOS.


прекратите использовать действие, которое расширяет DroidGap, создайте обычную активность Android и поместите org.апаш.Кордова.CordovaWebView в файле макета. Это даст вам гораздо больше гибкости.

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


Если вы используете jQuery-Mobile вы можете сделать:

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

затем в onProgressChanged сделайте:

$('#ui-loading-extra').text(progress  + '%');