2016-02-21 198 views
0

我有一個WebView應用程序,並希望添加啓動屏幕以顯示加載頁面或設置的時間量。我嘗試了一些其他的解決方案,但找不到一個工作。如果需要知道,我的飛濺圖像是splash.png,位於可繪製文件夾中。適用於Android Webview的初始屏幕

這裏是我的MainActivity.java

public class MainActivity extends Activity { 

private GoogleApiClient client; 

@Override 
public void onBackPressed() 
{ 
    WebView webView = (WebView) findViewById(R.id.webView); 
    if(webView.canGoBack()){ 
     webView.goBack(); 
    } 
    if (doubleBackToExitPressedOnce) { 
     super.onBackPressed(); 
     return; 
    } 

    this.doubleBackToExitPressedOnce = true; 
    Toast.makeText(this, "Tap Twice To Exit", Toast.LENGTH_SHORT).show(); 

    new Handler().postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      doubleBackToExitPressedOnce=false; 
     } 
    }, 2000); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    WebView view = (WebView) this.findViewById(R.id.webView); 
    view.getSettings().setJavaScriptEnabled(true); 
    view.setWebViewClient(new MyBrowser()); 

    client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); 
    if(isNetworkStatusAvialable (getApplicationContext())) { 
     view.loadUrl("file:///android_asset/index.html"); 
    } else { 
     view.loadUrl("file:///android_asset/error.html"); 

    } 
} 
public static boolean isNetworkStatusAvialable (Context context) { 
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (connectivityManager != null) 
    { 
     NetworkInfo netInfos = connectivityManager.getActiveNetworkInfo(); 
     if(netInfos != null) 
      if(netInfos.isConnected()) 
       return true; 
    } 
    return false; 
} 
@Override 
public void onStart() { 
    super.onStart(); 

    client.connect(); 
    Action viewAction = Action.newAction(
      Action.TYPE_VIEW, 
      "MLINKS", 
      Uri.parse("http://host/path"), 

      Uri.parse("android-app://PACKAGE-NAME/http/host/path") 
    ); 
    AppIndex.AppIndexApi.start(client, viewAction); 
} 

@Override 
public void onStop() { 
    super.onStop(); 

    Action viewAction = Action.newAction(
      Action.TYPE_VIEW, 
      "MLINKS", 
      Uri.parse("http://host/path"), 
      Uri.parse("android-app://PACKAGE-NAME/http/host/path") 
    ); 
    AppIndex.AppIndexApi.end(client, viewAction); 
    client.disconnect(); 
} 

private class MyBrowser extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return true; 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

boolean doubleBackToExitPressedOnce = false; 

} 

感謝您的幫助!

+0

你想做什麼?你的問題不太清楚 –

+0

@BasilBattikhi我想顯示一個啓動畫面而不是webview,直到頁面加載完成。 –

回答

0

編輯:

定義進度對話框:

private ProgressDialog pd; 

那麼你的內部:

view.setWebViewClient(新MyBrowser(){

插入這樣的:

 @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      pd.show(); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      pd.dismiss(); 
     } 
+0

我很新的Android Studio,不知道如何做到這一點,你可以給任何鏈接或代碼如何做到這一點? –

+0

編輯我的答案,希望它有幫助。 – statosdotcom

0

我一次做了這樣的事情。 IIRC,它是這樣的:

首先,我創建了一個特殊的ImageView子類,它覆蓋了onTouchEvent()並丟棄了所有的事件。

那麼對於我的佈局,我有我的ImageView子類覆蓋了WebView然後使其隱藏,像這樣(例如):

<FrameLayout 
    ... 
    > 

    <WebView 
     ... 
     /> 

    <com.example.TouchHandlerImageView 
     .... 
     android:src="R.drawable.splash" 
     android:visibility="gone" 
     /> 
.... 
</FrameLayout> 

然後我的代碼是這樣的:

  • 展飛濺的imageview。 (該onTouchEvent()將保持觸摸事件,從經歷到WebView下面)
  • 啓動頁面加載(在我的情況,我也不得不運行一些JavaScript代碼來設置頁)
  • WebViewClientonPageFinshed(),隱藏飛濺imageview,顯示WebView頁面完全加載。
0

首先做一個背景,並顯示它的主屏幕,直到數據準備就緒。

使用AsyncTask類,因爲它有3種方法,這其中

1- onPreExecute()//沒有做任何事情在這裏

2- doInBackgroundProcess()//這裏獲取你的數據

3- onPostExecute()//取回原始背景