如何在Android phonegap应用程序中的启动画面中添加微调器

时间:2013-06-11 00:36:01

标签: android cordova screen spinner splash

我正在使用Phonegap + Jquery手机开发Android应用程序,启动应用程序时显示一个启动画面,但它是一个静态png文件,现在我的客户一直要求一些加载指示器,如微调器或进度条用户正在等待正在加载的应用程序时出现闪屏。

我按照一个示例在启动画面中显示进度条,但它不起作用,在它下面是我的代码。

main java:

super.onCreate(savedInstanceState);

final Activity activity = this;
final ProgressBar progessBar1;
View footer = View.inflate(getContext(), R.layout.spinner, null);
root.addView(footer);

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

         }
    });

super.setIntegerProperty("splashscreen", R.drawable.splash);
super.setStringProperty("loadingDialog", "Wait, loading packages ...");


super.loadUrl("file:///android_asset/www/index.html", 12000);
super.setIntegerProperty("loadUrlTimeoutValue", 12000); 

和res / layout中的spinner.xml:

    <?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>

但它没有显示进度条。

我的问题:

  1. 任何人都可以帮忙指出我做错了什么,谢谢。

  2. 以其他任何方式执行此操作,实际上我只想在启动画面上显示一个微调器,即可。

3 个答案:

答案 0 :(得分:1)

确保您的初始图像具有透明背景。

Splashscreen占用整个屏幕空间隐藏后面的进度条。我试图带上前进()进度条,它也没有在启动画面上显示它。

我尝试运行你的代码,它会在

上抛出nullpointer异常
    this.appView.setWebChromeClient.....

因为 appView 在此行为空。

我将代码更改为以下内容((即在setwebchromeclient之前加载url),它会同时显示启动画面和进度条。

    super.onCreate(savedInstanceState);

    final Activity activity = this;
    final ProgressBar progessBar1;

    super.setIntegerProperty("splashscreen", R.drawable.splash);
    super.setStringProperty("loadingDialog", "Wait, loading packages ...");
    super.loadUrl("file:///android_asset/www/index.html", 20000);
    super.setIntegerProperty("loadUrlTimeoutValue", 20000);


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

    progessBar1 = (ProgressBar) findViewById(R.id.progressBar11);

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

        }
    });

enter image description here

答案 1 :(得分:0)

我相信这也不会像你想要的那样。在某一点添加了相同的ProgressBar小部件,它是相同的(丑陋的)加载栏 - 至少在我的droid3上 - 当你通过浏览器查看网页时,它会显示在操作系统浏览器上。这对于“原生”的外观和感觉并不好。

答案 2 :(得分:0)

是的,您正在获取nullpointer异常,因为代码中进度条的ID与布局文件中的id不匹配。

以下一行

com.accoladewios.apps.jetabout.MainActivity$1.onProgressChanged(MainActivity.java:42)

表示空指针异常的第42行。

splash.xml 中的进度条ID为 progressBar1 。而 代码中的以下行使用 progressbar1

progessBar1 = (ProgressBar) findViewById(R.id.progressbar1 );

如果在运行上面的行之后调试代码,变量 progessBar1 将为null。

修复此问题,启动画面应显示进度条。