Добавить индикатор загрузки / индикатор выполнения в 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
. Вы можете добавить свой (любой) родной View
s для этой переменной.
вот как я сделал:
-
создать макет в ваш РЭС/макеты/
<?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>
-
выполните все шаги, которые вы обычно выполняете для добавления индикатора выполнения WebView:
final Activity activity = this; private ProgressBar progessBar1;
-
добавьте созданный макет:
View footer = View.inflate(getContext(), R.layout.mainshop, null); root.addView(footer);
если вы добавите его после вызова
super.loadURL(...);
он будет отображаться внизу. Если вы добавите его раньше, макет будет отображаться перед appView. -
после этого вы просто добавляете это:
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 в файле макета. Это даст вам гораздо больше гибкости.
Если вы используете jQuery-Mobile вы можете сделать:
$.mobile.showPageLoadingMsg();
$('.ui-loader h1').html('<h1>Saving ... <span id="ui-loading-extra"></span>');
затем в onProgressChanged сделайте:
$('#ui-loading-extra').text(progress + '%');