2016-02-21 141 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()//取回原始背景