如何在启动splashscreen的同时在webview中加载url?

这是我的启动画面活动。

public class Splash extends Activity { private static int SPLASH_TIME_OUT=10000; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); Timer r=new Timer(); new Handler().postDelayed(r,SPLASH_TIME_OUT); } class Timer implements Runnable{ @Override public void run() { // TODO Auto-generated method stub Intent i=new Intent(Splash.this,MainActivity.class); startActivity(i); finish(); } } } 

这是我的MainActivity。 此活动应在后台执行,而前面有防溅板。 是否可以使用AsyncTask。 怎么做?

如果不是AsyncActivity,我可以使用什么?

 public class MainActivity extends Activity { private WebView webview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webview = (WebView)findViewById(R.id.output); webview.getSettings().setJavaScriptEnabled(true); webview.getSettings().setLoadsImagesAutomatically(true); webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); webview.getSettings().setAppCacheEnabled(false); webview.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); if(url.startsWith("tel:")) { Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); startActivity(intent); return true; } return false; } } ); webview.loadUrl("http://www.example.com"); } //this is to go back to previous pages if exists public boolean onKeyDown(int keyCode, KeyEvent event) { if(event.getAction() == KeyEvent.ACTION_DOWN){ switch(keyCode) { case KeyEvent.KEYCODE_BACK: if(webview.canGoBack()){ webview.goBack(); }else{ finish(); } return true; } } return super.onKeyDown(keyCode, event); } } 

如果可能,我可以设置启动画面的时间,只要加载的url没有给出时间吗?

第二次尝试

 public class MainActivity extends Activity { WebView webview; private boolean isSplashOn = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webview.setBackgroundColor(0); webview.setBackgroundResource(R.drawable.activity_splash); webview = (WebView)findViewById(R.id.output); webview.getSettings().setJavaScriptEnabled(true); webview.getSettings().setLoadsImagesAutomatically(true); webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); webview.getSettings().setAppCacheEnabled(false); webview.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); if(url.startsWith("tel:")) { Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); startActivity(intent); return true; } return false; } public void onPageFinished(WebView view, String url) { if(isSplashOn) { webview.setBackgroundDrawable(null); webview.setBackgroundColor(0); isSplashOn = false; } super.onPageFinished(view, url); } } ); webview.loadUrl("http://www.example.com"); } public boolean onKeyDown(int keyCode, KeyEvent event) { if(event.getAction() == KeyEvent.ACTION_DOWN){ switch(keyCode) { case KeyEvent.KEYCODE_BACK: if(webview.canGoBack()){ webview.goBack(); }else{ finish(); } return true; } } return super.onKeyDown(keyCode, event); } } 

伙计们。 问题仍然没有解决。 需要一些帮助

您可以在没有AsyncTask的情况下执行此操作,并且可以在没有计时器的情况下加载页面时隐藏启动画面。

WebViewClient类有一个onPageFinished()方法,一旦页面加载就会被调用。 你可以利用它。

在你的项目文件夹中,放置名为’splash_screen.png’的泼溅屏幕图像(或者你想要的任何名称。如果你想使用不同的名字,那么改变这一行webView.setBackgroundResource(R.drawable.splash_screen);映射到您的启动画面图像文件)在res / drawable-xxx下具有相应的分辨率。

对于Eg:我按照这些分辨率为我的应用程序的启动画面。

hdpi – 400×800
ldpi – 240×320
mdpi – 320×480
xdpi – 640×960

并尝试以下代码:

 public class MainActivity extends Activity { final Activity activity = this; private WebView webView; private boolean isSplashOn = false; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.webView); webView.setBackgroundColor(0); webView.setBackgroundResource(R.drawable.splash_screen); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setLoadsImagesAutomatically(true); webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); webView.getSettings().setAppCacheEnabled(false); webView.getSettings().setLoadWithOverviewMode(true); webView.getSettings().setPluginsEnabled(true); webView.getSettings().setPluginState(PluginState.ON); webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); webView.setScrollbarFadingEnabled(false); webView.setWebViewClient(new MyWebClient()); webView.loadUrl("http://www.google.com"); } public class MyWebClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); if(url.startsWith("tel:")) { Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); startActivity(intent); return true; } return false; } @Override public void onPageFinished(WebView view, String url) { if(!isSplashOn) { webView.setBackgroundDrawable(null); webView.setBackgroundColor(0); isSplashOn = true; } super.onPageFinished(view, url); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { if(webView.canGoBack()) { webView.goBack(); return true; }else { activity.finish(); } } return super.onKeyDown(keyCode, event); } } 

activity_main.xml中

     

编辑:

顺便说一下,我发现你的代码存在问题。 您正在尝试在实例化之前将启动屏幕设置为webview。

从这里更改您的代码:

 webview.setBackgroundColor(0); webview.setBackgroundResource(R.drawable.activity_splash); webview = (WebView)findViewById(R.id.output); 

对此:

 webview = (WebView)findViewById(R.id.output); webview.setBackgroundColor(0); webview.setBackgroundResource(R.drawable.activity_splash); 

你可以使用简单的技巧 – 我正在显示一个加载微调器,直到页面被加载到后台。 因此我使用了两个Web视图。 在您的情况下,您可以使用ImageView或任何其他视图。

XML文件会喜欢这个 –

  //Actual webview  //Any view you want to show while webpage is loading  ...  

现在,在您的JAVA文件中 –

 //initially, make actual_webview invisible actual_webview.setVisibility(View.INVISIBLE); 

另外,在

  @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); // make spinner_webview invisible spinner_webview.setVisibility(View.INVISIBLE); // make actual_webview visible actual_webview.setVisibility(View.VISIBLE); } 

也,

 shouldOverrideUrlLoading(...) onPageStarted(...) onPageFinished(...) 

在所有这些方法中,您获取URL并可以检查正在加载或完成加载的URL。 根据URL,您可以决定是否显示/隐藏启动画面。

为什么泼水必须是活动?

您可以在布局底部创建一个全屏幕ImageView,并使用处理程序隐藏它:

  new Handler().postDelayed(new Runnable() { @Override public void run() { if (isDestroyed()) return; mSplashView.setVisibility(View.GONE); } },2000);