我正在使用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>
但它没有显示进度条。
我的问题:
任何人都可以帮忙指出我做错了什么,谢谢。
以其他任何方式执行此操作,实际上我只想在启动画面上显示一个微调器,即可。
答案 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 + "");
}
});
答案 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。
修复此问题,启动画面应显示进度条。