2013-04-03 3 views
-3

WebView에서 웹 사이트를로드하려고하는데로드가 너무 느려서 흰색 화면이 표시됩니다. 스플래시 화면을 보여주고 백그라운드에서 WebView를로드하려고합니다. 몇 초 후에 시작 화면을 닫고 그때까지 준비해야 할 사이트를 표시하고 싶습니다. 내가 어떻게 해? 감사합니다.어떻게 2 개의 활동을로드 할 수 있습니까?

+0

, 단지 downvotes에서 질문을 저장하는 경우,이 _presently_ 어떤 코드를 보여줄 수있는 좋은 방법입니다! – halfer

답변

1

나는 시작 화면

public class SplashActivity extends Activity { 

    private boolean isBackButtonPressed; 
    private static final int SPLASH_DURATION = 2000; // 2 seconds 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setTheme(R.style.SplashTheme); 
     getWindow().setWindowAnimations(0); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     setContentView(R.layout.activity_splash); 

     Handler handler = new Handler(); 

     // run a thread after 2 seconds to start the home screen 
     handler.postDelayed(new Runnable() { 

      @Override 
      public void run() { 

       // make sure we close the splash screen so the user won't come 
       // back when it presses back key 

       finish(); 

       if (!isBackButtonPressed) { 
        // start the home screen if the back button wasn't pressed 
        Intent intent = new Intent(SplashActivity.this, FragmentActivity.class); 
        startActivity(intent); 
        finish(); 
       } 

      } 

     }, SPLASH_DURATION); 
    } 

    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     isBackButtonPressed = true; 
    } 

} 
+0

대단히 감사합니다! – user2191116

1

당신은 그것을 위해 다음 코드를 사용하여이 코드를 사용합니다.

public class Splash extends Activity { 
/** Called when the activity is first created. */ 

private boolean mSplashActive = true, mPaused; 
private long mSplashTime = 1000; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.splash); 

    new Thread(){ 
     public void run(){ 
      try { 
       long ms = 0; 
       while(mSplashActive && ms < mSplashTime) { 
        sleep(100); 
        if(!mPaused) { 
         ms += 100; 
        } 
       } 
       if(Resources.getResources().isUserRegistered(Splash.this)) { 
        //user is registered so launch main screen 
       } else { 
        //user is not registered launch welcome wizard. 
        Intent intent = new Intent(Splash.this, WelcomeScreen.class); 
        Splash.this.startActivity(intent); 
       } 
       finish(); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }.start(); 

} 

@Override 
public void onPause(){ 
    super.onPause(); 
    mPaused = true; 
} 

@Override 
public void onResume(){ 
    super.onResume(); 
    mPaused = false; 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    super.onKeyDown(keyCode, event); 

    if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { 
     mSplashActive = false; 
    } 
    return true; 
} 
} 
+0

대단히 감사합니다! – user2191116

0

webview 클래스에서 이와 같이 설정할 수 있습니다. 당신을 위해

내가 설정이 :

public class WebViewActivity extends Activity { 

WebView webView; 
ProgressDialog progressDialog; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_web_view); 
    progressDialog = new ProgressDialog(WebViewActivity.this); 
    progressDialog.setTitle("here your title"); 
    progressDialog.setMessage("message here"); 

    webView = (WebView) findViewById(R.id.webView1); 

    webView.setWebViewClient(new WebViewClient(){ 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      // TODO Auto-generated method stub 
      // here you can display an imageview fullscreen 
      // or show and progressdialog 
      progressDialog.show(); 

     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      // TODO Auto-generated method stub 
      // here you can remove the imageview and the user can continue using the webview 
      // or hide the progressdialog 
      progressDialog.dismiss(); 

     } 

    }); 

} 

}

당신이 알려주세요 질문이있는 경우

+0

대단히 감사합니다! 당신의 대답은 제가 가장 필요로하는 것입니다! 하지만 크롬을 사용하고 있습니다 - (mWebView.setWebChromeClient (new GeoWebChromeClient() {), 거기에 "onPageFinished"와 같은 옵션이 없습니다 ... :-( – user2191116

+0

Webchromeclient와 webviewclient를 모두 설정하여 설정할 필요가 없습니다. webchrome 또는 webview 또는 둘 다. –

+0

progressdialog의 경우 progressDialog.setCancelable (false) 및 progressDialog.setCanceledOnTouchOutside (false) 설정을 제안합니다. 따라서 사용자가 대화 상자를 취소 (취소) 할 수 없습니다. –

0

공용 클래스로 SplashScreen이 활동 { 개인 스레드 mSplashThread을 확장;

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.splash); 

    final SplashScreen sPlashScreen = this; 

    // The thread to wait for splash screen events 
    mSplashThread = new Thread() { 
     @SuppressWarnings("deprecation") 
     @Override 
     public void run() { 
      try { 
       synchronized (this) { 
        // Wait given period of time or exit on touch 
        wait(5000); 
       } 
      } catch (InterruptedException ex) { 
      } 

      finish(); 

      // Run next activity 
      Intent intent = new Intent(); 
      intent.setClass(sPlashScreen, MainActivity.class); 
      startActivity(intent); 

     } 
    }; 

    mSplashThread.start(); 
} 

/** 
* Processes splash screen touch events 
*/ 
@Override 
public boolean onTouchEvent(MotionEvent evt) { 
    if (evt.getAction() == MotionEvent.ACTION_DOWN) { 
     synchronized (mSplashThread) { 
      mSplashThread.notifyAll(); 
     } 
    } 
    return true; 
} 

} 여기 일반적으로

+0

대단히 감사합니다. ! – user2191116

관련 문제